2012-11-21 17 views
16

Sto configurando una nuova app con laravel (Laravel 4) e alcuni problemi con l'impostazione del database tramite le migrazioni.Come eseguire le migrazioni per un ambiente specifico in laravel

ho fatto un file di migrazione con:

artisan migrate:make --table="jobs" --create jobs 

che ha creato un file nel database/migrazioni come previsto, ho fatto alcuni mods a questo, ed è andato a sparare usando

artisan migrate --env=local 

Ma sto ottenendo la risposta di "Nothing to migrate"

Se provo a eseguire senza --env=local, utilizza il database.php nella cartella config (non in locale/staging/cartella di produzione) che non vogliamo utilizzare, in quanto non sarà specifico per l'ambiente.

Il mio primo pensiero è stato OK, forse ho bisogno di mettere il flag ENV sulla chiamata migrate:make, quindi ho provato, ma ho ricevuto un errore dicendo che non poteva creare il file di migrazione. Poi ho pensato che non avrebbe senso fare migrazioni basate su env comunque ... dovrebbero essere create generiche, e semplicemente eseguite su base ENV, quindi alla fine, tutti gli ambienti usano gli stessi script di migrazione.

Quindi sono un po 'bloccato ora su dove andare a da qui

risposta

21

È necessario specificare l'ambiente prima che il comando di migrazione.

artisan --env=local migrate 

esecuzione artisan help mostra il formato in cui i comandi sono da seguire.

+0

purtroppo, questo non ha avuto effetto ... ancora trovato la 'Nulla per migrare' messaggio – duellsy

+0

Bene, secondo l'aiuto è così che si specificano le opzioni. Dai un'occhiata a 'artisan help' e vedrai che è nel formato di' [opzioni] comando [argomenti] '. Il mio consiglio ora è di assicurarsi che tutti gli ambienti siano stati installati correttamente. Ho appena controllato, e funziona bene per me. Quindi ti manca qualcos'altro. –

+0

Questo non funziona. – gandra404

1

Se si modifica una migrazione dopo averla eseguita, è necessario prima eseguire il rollback della migrazione.

php artisan migrate:rollback 

Continua a farlo finché non viene ripristinata la migrazione che hai modificato. In alternativa, è possibile reimpostare l'intero schema con

php artisan migrate:reset 

Ma sarà quindi necessario chiamare i tuoi migrazioni come normale per portarli fino ad oggi.

php artisan migrate 

Infine è possibile reimpostare e quindi migrare richiamando

php artisan rebuild 

Si noti inoltre che è generalmente cattiva pratica di modificare le migrazioni dopo che sono state fatte, a meno che non letteralmente appena fatta. Una volta distribuito, non è necessario modificarlo e creare invece un nuovo file di migrazione.

Spero che questo aiuti.

Modifica: in qualche modo ho perso l'indicatore Laravel 4. Molti di questi comandi funzionano ancora, ma potrebbe essere necessario regolarli.

+0

Scusate, quando ho detto "fatto alcune mod" intendevo solo aprire il file di migrazione appena generato e aggiunto nel mio codice di migrazione. Non stavo modificando una migrazione già eseguita. Questa è la prima migrazione per questo progetto – duellsy

+0

è anche possibile rimuovere e ricostruire le migrazioni in un unico comando usando la migrazione di artisan php: aggiorna – Atheist

3

risolto.

Soluzione era semplicemente per modificare il local/database.php (o produzione/database.php ecc), facendo in modo che la variabile migrazioni percorso punta alla posizione che migrate:make sta creando il file di migrazione, basta cambiare

'application' => __DIR__.'/../database/migrations', 

a

'application' => DIR.'/../../database/migrations', 
0

ho capito una soluzione a correre migrate per diversi database. Fondamentalmente, il comando artisan migrate --env=local non funziona. Ma possiamo definire una nuova stringa di connessione in config\database.php. Per esempio:

<?php 
    'mysql_testing' => [ 
     'driver' => 'mysql', 
     'host'  => env('DB_TESTING_HOST'), 
     'database' => env('DB_TESTING_DATABASE'), 
     'username' => env('DB_TESTING_USERNAME'), 
     'password' => env('DB_TESTING_PASSWORD'), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => 'prefix_', 
    ], 

e specificare il --database quando si corre artisan migrate così:

php artisan migrate --database=mysql_testing 

Spero che questo aiuti :)

Problemi correlati