6

Ich habe eine Laravel Installation und haben drei Umgebungen mit ihren eigenen entsprechenden Konfigurations Verzeichnisse einrichten:Wie führe ich Laravel Artisan-Migrationen auf AWS Elastic Beanstalk durch?

  • lokale
  • Inszenierung
  • Produktion

Ich benutze php artisan migrate:make create_users_table als here beschrieben usw. erstellen Datenbankmigrationen.

In meiner lokalen Umgebung verwende ich Vagrant und ein einfaches MySQL-Server-Setup, und bei der Bereitstellung & Produktion verwende ich AWS RDS.

... 
"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" => "", 
), 
... 

Ich benutze git die App mit git aws.push zu implementieren als here beschrieben:

Um den Datenbankzugriff für die Stagingenvironment Ich habe eine app/config/staging/database.php Datei mit Einstellungen, wie dieses zu konfigurieren.

Die Frage ist: Wie führe ich die Migration auf meinem Staging (und später Produktion) EBS-Server bei der Bereitstellung?

Antwort

12

Ich löste es durch Erstellen eines neuen Verzeichnisses im Stamm meines Projekts mit dem Namen .ebextensions. In diesem Verzeichnis habe ich eine Skriptdatei my-scripts.config:

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

Die Datei my-scripts.config ausgeführt wird, wenn EBS setzt, ist eine YAML-Datei und sieht wie folgt aus:

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

Fügen Sie das Verzeichnis und Datei git, Commit, und führen Sie git aws.push und es wird migrieren.

Erläuterungen, wie Sachen in .ebextensions arbeiten, können here gefunden werden.

Der Pfad /var/app/ondeck ist, wo Ihre Anwendung lebt, wenn Ihr Skript ausgeführt wird, wird es anschließend in /var/app/current kopiert werden.

Der Handwerker Option --env=staging für das Erklären Handwerker nützlich ist, in welcher Umgebung sie in laufen sollte, so dass es die richtigen Datenbankeinstellungen von app/config/staging/database.php

Wenn Sie eine schnelle und schmutzige Art und Weise müssen finden, warum der Migrate Befehl zur Anmeldung schlägt fehl Vielleicht möchten Sie etwas wie "php /var/app/ondeck/artisan --env=staging migrate > /tmp/artisan-migrate.log" ausprobieren, damit Sie sich bei Ihrer ec2-Instanz anmelden und das Protokoll überprüfen können.

+0

Was passiert also für die nächsten Migrationen, die ich mache? Wie für diese kann ich sie nicht wieder zu GIT hinzufügen, da sie bereits hinzugefügt sind. Oder ich kann '' 'git aws.push''' nicht ausführen. Was wird der Schritt dafür sein? - Vielen Dank. –

+0

@HimelNagRana ​​Ich folge nicht ganz, aber Sie verstehen vielleicht falsch, wie Migrationen (sollten) funktionieren. Alle Ihre Migrationsskripts sollten immer im Git Repo sein. Ihre Datenbank sollte nicht bei jeder Bereitstellung "zurückgesetzt" werden. Die Migration sollte nur die kleinen Änderungen an Ihrer Up-Methode im Migrationsskript durchführen. Sehen Sie sich die Migrationsdokumente an: http://laravel.com/docs/4.2/migrations – oskarth

+0

Ich glaube, ich konnte mich nicht klar machen. Das tut mir leid.Ich verstehe, wie Migration funktioniert (oder funktionieren sollte). Es war eher eine deployment-bezogene Frage, die ich herausfinden konnte. Angenommen, ich möchte "last_login" zur Benutzereinheit hinzufügen. Dann werde ich Migration generieren und sie ausführen. Meine Frage war, muss ich etwas Außergewöhnliches tun, um die Migration während der Bereitstellung in ElasticBeanstalk auszuführen? Später fand ich, dass die Antwort "Nein" ist. Danke trotzdem. –