5353# ###########################################################################
5454
5555artisan_migrate () {
56- migrate_flags=" "
57-
5856 debug_log " Starting migrations (isolation: $AUTORUN_LARAVEL_MIGRATION_ISOLATION )"
5957
6058 echo " 🚀 Clearing Laravel cache before attempting migrations..."
@@ -73,7 +71,8 @@ artisan_migrate() {
7371 ;;
7472 esac
7573
76- # Build migration flags (used for all databases)
74+ # Determine if isolation is intended to be used
75+ isolation_enabled=" false"
7776 if [ " $AUTORUN_LARAVEL_MIGRATION_ISOLATION " = " true" ]; then
7877 # Isolation only works in default mode
7978 if [ " $AUTORUN_LARAVEL_MIGRATION_MODE " != " default" ]; then
@@ -87,9 +86,12 @@ artisan_migrate() {
8786 return 1
8887 fi
8988
90- migrate_flags= " $migrate_flags --isolated "
89+ isolation_enabled= " true "
9190 fi
9291
92+ # Start assembling migration flags
93+ migrate_flags=" "
94+
9395 if [ " $AUTORUN_LARAVEL_MIGRATION_FORCE " = " true" ]; then
9496 migrate_flags=" $migrate_flags --force"
9597 fi
@@ -98,30 +100,55 @@ artisan_migrate() {
98100 migrate_flags=" $migrate_flags --seed"
99101 fi
100102
101- # Determine if multiple databases are specified
103+ # Helper function to run migrations for a specific database
104+ run_migration_for_db () {
105+ db_name=" ${1:- } "
106+
107+ # Build display name and database flag for messages/commands
108+ if [ -n " $db_name " ]; then
109+ db_display_name=" '$db_name '"
110+ db_flag=" --database=$db_name "
111+ else
112+ db_display_name=" default database"
113+ db_flag=" "
114+ fi
115+
116+ # Wait for database connection
117+ if ! wait_for_database_connection $db_name ; then
118+ echo " ❌ $script_name : Failed to connect to $db_display_name "
119+ return 1
120+ fi
121+
122+ # Determine if --isolated can be used for this database
123+ db_migrate_flags=" $migrate_flags "
124+ if [ " $isolation_enabled " = " true" ]; then
125+ if db_has_migrations_table $db_name ; then
126+ db_migrate_flags=" $db_migrate_flags --isolated"
127+ debug_log " Using --isolated flag for $db_display_name "
128+ else
129+ echo " ℹ️ Skipping --isolated flag for $db_display_name : migrations table not ready (normal for first deployment)"
130+ echo " The --isolated flag will be used on subsequent deployments."
131+ fi
132+ fi
133+
134+ echo " 🚀 Running migrations for $db_display_name "
135+ php " $APP_BASE_DIR /artisan" $migration_command $db_flag $db_migrate_flags
136+ }
137+
138+ # Run migrations for specified database(s)
102139 if [ -n " $AUTORUN_LARAVEL_MIGRATION_DATABASE " ]; then
103140 databases=$( convert_comma_delimited_to_space_separated " $AUTORUN_LARAVEL_MIGRATION_DATABASE " )
104141 database_list=$( echo " $databases " | tr ' ,' ' ' )
105142
106143 for db in $database_list ; do
107- # Wait for this specific database to be ready
108- if ! wait_for_database_connection " $db " ; then
109- echo " ❌ $script_name : Failed to connect to database: $db "
144+ if ! run_migration_for_db " $db " ; then
110145 return 1
111146 fi
112-
113- echo " 🚀 Running migrations for database: $db "
114- php " $APP_BASE_DIR /artisan" $migration_command --database=$db $migrate_flags
115147 done
116148 else
117- # Wait for default database connection
118- if ! wait_for_database_connection; then
119- echo " ❌ $script_name : Failed to connect to default database"
149+ if ! run_migration_for_db; then
120150 return 1
121151 fi
122-
123- # Run migration with default database connection
124- php " $APP_BASE_DIR /artisan" $migration_command $migrate_flags
125152 fi
126153}
127154
@@ -316,6 +343,16 @@ laravel_version_is_at_least() {
316343 fi
317344}
318345
346+ db_has_migrations_table () {
347+ database_arg=" ${1:- } "
348+
349+ if [ -n " $database_arg " ]; then
350+ php " $APP_BASE_DIR /artisan" migrate:status --database=" $database_arg " > /dev/null 2>&1
351+ else
352+ php " $APP_BASE_DIR /artisan" migrate:status > /dev/null 2>&1
353+ fi
354+ }
355+
319356test_db_connection () {
320357 if [ " $AUTORUN_LARAVEL_MIGRATION_SKIP_DB_CHECK " = " true" ]; then
321358 return 0
@@ -324,9 +361,9 @@ test_db_connection() {
324361 # Pass database connection name only if specified (not empty)
325362 database_arg=" ${1:- } "
326363 if [ -n " $database_arg " ]; then
327- php " $AUTORUN_LIB_DIR /laravel/test-db-connection.php" " $APP_BASE_DIR " " $AUTORUN_LARAVEL_MIGRATION_MODE " " $AUTORUN_LARAVEL_MIGRATION_ISOLATION " " $ database_arg"
364+ php " $AUTORUN_LIB_DIR /laravel/test-db-connection.php" " $APP_BASE_DIR " " $AUTORUN_LARAVEL_MIGRATION_MODE " " $database_arg "
328365 else
329- php " $AUTORUN_LIB_DIR /laravel/test-db-connection.php" " $APP_BASE_DIR " " $AUTORUN_LARAVEL_MIGRATION_MODE " " $AUTORUN_LARAVEL_MIGRATION_ISOLATION "
366+ php " $AUTORUN_LIB_DIR /laravel/test-db-connection.php" " $APP_BASE_DIR " " $AUTORUN_LARAVEL_MIGRATION_MODE "
330367 fi
331368}
332369
0 commit comments