6

Mam instalację laravel i utworzyły trzech środowisk z własnymi odpowiednich katalogów config:Jak wykonać migracje rzemieślnicze Laravel na AWS Elastic Beanstalk?

  • lokalny
  • inscenizacja
  • produkcyjnych

używam php artisan migrate:make create_users_table etc jak opisano here stworzyć migracje baz danych.

W moim lokalnym środowisku korzystam z Vagrant i prostej konfiguracji serwera MySQL, a przy tworzeniu wersji & używam AWS RDS.

Aby skonfigurować dostęp do bazy danych dla inscenizacjienvironment Mam plik app/config/staging/database.php z ustawieniami takiego:

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

używam git wdrożyć aplikację z git aws.push jak opisano here.

Pytanie brzmi: w jaki sposób uruchomić migrację na serwerze tymczasowym EBS podczas wdrażania (i późniejszej) podczas wdrażania?

Odpowiedz

12

Rozwiązałem go, tworząc nowy katalog w katalogu głównym mojego projektu o nazwie .ebextensions. W tym katalogu stworzyłem skrypt my-scripts.config:

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

Plik my-scripts.config pobiera wykonywane podczas EBS wdraża, to plik YAML i wygląda tak:

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

Dodaj katalog i plik do git, zatwierdzić i uruchomić git aws.push i będzie migrować.

Wyjaśnienia dotyczące działania elementów .ebextensions można znaleźć pod adresem here.

Ścieżka /var/app/ondeck to miejsce, w którym aplikacja działa po uruchomieniu skryptu, a następnie zostanie skopiowane do /var/app/current.

Opcja rzemieślnik --env=staging jest przydatna mówi rzemieślnik co środowisko powinien działać w tak, że można go znaleźć odpowiednie ustawienia bazy danych z app/config/staging/database.php

Jeśli potrzebujesz szybki i brudny sposób, aby zalogować dlaczego polecenie Migrate nie możesz wypróbować coś takiego jak "php /var/app/ondeck/artisan --env=staging migrate > /tmp/artisan-migrate.log", aby móc zalogować się do instancji EC2 i sprawdzić dziennik.

+0

co się stanie z następnymi migracjami, które robię? Podobnie jak dla tych, nie mogę dodać ich ponownie do GIT, ponieważ są już dodane. Lub nie mogę uruchomić '' 'git aws.push'''. Więc jaki będzie na to krok? - Dzięki. –

+0

@HimelNagRana ​​Nie podąża za mną, ale możesz być nieporozumieniem, jak migracje (powinny) działać. Wszystkie twoje skrypty migracji powinny zawsze znajdować się w repozytorium git. Twoja baza danych nie powinna być "resetowana" przy każdym wdrożeniu, migracja powinna wykonywać tylko małe zmiany w twojej metodzie "up" w skrypcie migracji. Sprawdź dokumentację dotyczącą migracji: http://laravel.com/docs/4.2/migrations – oskarth

+0

Myślę, że nie byłem w stanie wyrazić się jasno. Przepraszam za to.Rozumiem, jak działa migracja (lub powinna działać). Było to raczej pytanie związane z wdrożeniem, które udało mi się ustalić. Na przykład powiedzmy, że chcę dodać "last_login" do encji użytkownika Następnie wygeneruję migrację i uruchomię ją. Moje pytanie brzmi, czy muszę zrobić coś wyjątkowego, aby migracja przebiegała podczas wdrażania do ElasticBeanstalk? Później odkryłem, że odpowiedź brzmi "nie". Dzięki i tak. –