Выполнение команды миграции Laravel на AWS Elastic Beanstalk - PullRequest
0 голосов
/ 21 ноября 2018

Мне трудно развернуть приложение Laravel для тестирования в AWS Elastic Beanstalk.Следил за всеми источниками, которые я мог найти в Интернете, включая документацию AWS.

Создание среды Elastic Beanstalk и загрузка приложения просты, если я не включаю в него .ebextensions и файл .yaml.

На основе учебника Максимилиана , который я создал init.config файл внутри .ebextensions с содержанием:

container_commands:
    01initdb:
        command: "php artisan migrate"

Среда переходит в ухудшенное состояние, когда она завершает обновление, и я получаюследующие журналы:

[2018-11-20T23:14:08.485Z] INFO  [7969]  : Command processor returning results: 
{"status":"FAILURE","api_version":"1.0","results":[{"status":"FAILURE","msg":"(TRUNCATED)...y exists\")\n/var/app/ondeck/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458\n\n2   PDOStatement::execute()\n/var/app/ondeck/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458\n\nPlease use the argument -v to see more details. \ncontainer_command 01initdb in .ebextensions/init.config failed. For more detail, check /var/log/eb-activity.log using console or EB CLI","returncode":1,"events":[]}],"truncated":"true"}

Я пробовал разные .config файлы из других ресурсов инструкций, но ни один из них не работает.

Я работаю: Laravel Framework 5.7.5Платформа EB использует PHP 7.2, работающий на 64-битной версии Amazon Linux / 2.8.4. RDS использует MySQL 5.6.40

Я действительно не знаю, что происходит, и буду признателен, если вы дадите какие-либо предложения.

1 Ответ

0 голосов
/ 21 ноября 2018

Я наконец нашел выход.Предоставление документации для тех, кто сталкивается с той же проблемой.

Что я пытался сделать ...

Моя главная цель состояла в том, чтобы протестировать приложение Laravel 5.7 наживой сервер AWS Elastic Beanstalk (EB).Мне также был нужен способ визуализации данных с помощью phpMyAdmin, инструмента, который соответствует моим потребностям.Это очень простое приложение CRUD, предназначенное только для изучения основ обеих технологий.

Что я делал (работал)

В основном следовал обычному рабочему процессу создания приложения EBиспользуя веб-консоль.

  1. Назовите приложение
  2. Выберите PHP в качестве платформы
  3. Начните с базового приложения (пока не загружайте код)
  4. Нажмите настроить дополнительные параметры
  5. В карточке безопасности выберите пару ключей и сохраните.( Это полезно для SSH на вашем сервере )
  6. В карточке базы данных создайте экземпляр RDS.Выберите любые параметры, которые соответствуют вашим потребностям, и задайте имя пользователя / пароль.
  7. Создание среды.

Через некоторое время у вас должны быть все ресурсы, созданные EB (экземпляры EC2 и RDS, безопасностьgroup, EIP, Buckets и т. д.) в среде приложения.

Подготовка приложения Laravel - это простой процесс.Вы не должны забывать изменить config / database.php для чтения серверных переменных.Мой подход состоял в том, чтобы определить их в начале файла.

Основные источники проблем заключаются в настройке экземпляра сервера для включения всего программного обеспечения и конфигурации, необходимых для вашего приложения и конкретных потребностей.Это делается путем включения файла .yaml в папку .ebextensions.Эта папка должна находиться в корневом каталоге вашего приложения laravel.Также хорошей идеей будет проверить синтаксис перед отправкой другой версии приложения в EB.В соответствии с моими потребностями я использовал этот скрипт , который в основном устанавливает phpMyAdmin при развертывании новой версии.В частности, для этого сценария запуска должны быть определены переменные среды, а именно $PMA_VER, $PMA_USERNAME, $PMA_PASSWORD для работы phpMyAdmin.Вы можете создать больше переменных среды на вкладке программного обеспечения вашей страницы конфигурации EB.Прочитайте документы.

Еще одна деталь, которая может вызвать проблемы при запуске команд при запуске с использованием сценария yaml (в частности, миграция ), связана с версиями Laravel и MySql.Как, например, я использую Laravel 5.7 и вариант версии mySql по умолчанию в мастере создания EB RDS - что-то вроде 5.6.x.Это вызовет проблемы типа :

  Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))

Если это ваш сценарий, несмотря на то, что вы уже гуглили и разобрались с добавлением строки кодаSchema::defaultStringLength(191); для функции загрузки вашего app / Providers / AppServiceProviders.php файла добьется цели.

Вы можете выполнить обычную миграцию, передав скрипт:

container_commands: 
  01_drop_tables:
    command:
      "php artisan migrate:fresh"

  02_initdb:
    command: 
      "php artisan migrate"

Это удалит существующие таблицы, избегая конфликтов, и создаст новую на основе вашего кода.Вы можете читать больше журналов с вашего сервера, используя SSH'ing и получая содержимое /var/log/eb-activity.log.

...