6

Ho un'installazione laravel e hanno istituito tre ambienti con i propri corrispondenti directory di configurazione:Come si eseguono le migrazioni di Laravel Artisan su AWS Elastic Beanstalk?

  • locale
  • messa in scena
  • produzione

Io uso php artisan migrate:make create_users_table ecc come descritto here per creare migrazioni di database.

Nel mio ambiente locale utilizzo Vagrant e una semplice configurazione del server MySQL e nella produzione di staging & utilizzo AWS RDS.

Per configurare l'accesso al database per la messa in scena environment Ho un file app/config/staging/database.php con le impostazioni in questo modo:

... 
"mysql" => array(
    "driver" => "mysql", 
    "host" => $_SERVER["RDS_HOSTNAME"], 
    "database" => $_SERVER["RDS_DB_NAME"], 
    "username" => $_SERVER["RDS_USERNAME"], 
    "password" => $_SERVER["RDS_PASSWORD"], 
    "charset" => "utf8", 
    "collaction" => "utf8_unicode_ci", 
    "prefix" => "", 
), 
... 

Io uso git per distribuire l'applicazione con git aws.push come descritto here.

La domanda è: come si esegue la migrazione sul server EBS di staging (e produzione successiva) durante la distribuzione?

risposta

12

Ho risolto creando una nuova directory nella radice del mio progetto denominata .ebextensions. In tale directory ho creato un file di script my-scripts.config:

.ebextensions/ 
    my-scripts.config 
app/ 
artisan 
bootstrap 
... 

Il file my-scripts.config viene eseguito quando EBS distribuisce, è un file YAML e si presenta così:

container_commands: 
    01-migration: 
     command: "php /var/app/ondeck/artisan --env=staging migrate" 
     leader_only: true 

aggiungere la directory e file in git, commettere ed eseguire git aws.push e verrà migrato.

Spiegazioni su come funzionano le opere .ebextensionshere.

Il percorso /var/app/ondeck è il luogo in cui la tua applicazione vive quando viene eseguito lo script, verrà successivamente copiato in /var/app/current.

L'opzione artigianale --env=staging è utile per raccontare artigianale quale ambiente che dovrebbe essere eseguito in, in modo che possa trovare le impostazioni del database corrette da app/config/staging/database.php

Se avete bisogno di un modo rapido e sporco per registrare il motivo per cui il comando di migrazione non riesce potresti provare qualcosa come "php /var/app/ondeck/artisan --env=staging migrate > /tmp/artisan-migrate.log" in modo da poter accedere alla tua istanza ec2 e controllare il registro.

+0

quindi cosa succederà per le prossime migrazioni che sto facendo? Come per quelli che non posso aggiungere di nuovo a GIT come sono già stati aggiunti. Oppure non posso eseguire '' 'git aws.push'''. Quindi quale sarà il passo per quello? - Grazie. –

+0

@HimelNagRana ​​Non seguo abbastanza, ma potresti essere frainteso su come le migrazioni (dovrebbero) funzionare. Tutti i tuoi script di migrazione dovrebbero sempre essere nel repository git. Il database non dovrebbe essere "ripristinato" su ogni distribuzione, la migrazione dovrebbe eseguire solo piccole modifiche nel metodo 'up' nello script di migrazione. Controlla i documenti di migrazione: http://laravel.com/docs/4.2/migrations – oskarth

+0

Penso di non essere stato in grado di farmi capire. Perdonami per quello.Capisco come funziona la migrazione (o dovrebbe funzionare). Era piuttosto una domanda relativa allo spiegamento che ero in grado di capire come. Ad esempio, supponiamo di voler aggiungere "last_login" all'entità utente. Poi lì genererò la migrazione e la eseguirò. La mia domanda è stata: devo fare qualcosa di eccezionale per eseguire la migrazione durante la distribuzione su ElasticBeanstalk? Più tardi ho scoperto che la risposta è "no". Grazie comunque. –