在AWS Elastic Beanstalk上运行Laravel的迁移命令

Gui*_*uza 2 amazon-web-services laravel amazon-elastic-beanstalk

我很难在AWS Elastic Beanstalk上部署Laravel应用程序以进行测试。关注了我可以在Web上找到的所有资源,包括AWS文档。

创建一个Elastic Beanstalk环境并上传应用程序非常简单,只要我不包含.ebextensions其中的.yaml文件即可。

根据Maximilian的教程,我在其中创建了包含内容的init.config文件.ebextensions

container_commands:
    01initdb:
        command: "php artisan migrate"
Run Code Online (Sandbox Code Playgroud)

随着更新完成,环境进入降级状态,并且我收到以下日志:

[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"}
Run Code Online (Sandbox Code Playgroud)

我一直在尝试与.config其他说明资源中的文件不同,但似乎都无法正常工作。

我正在运行:Laravel Framework 5.7.5 EB平台使用在64位Amazon Linux / 2.8.4上运行的PHP 7.2,RDS使用MySQL 5.6.40

我真的不知道发生了什么,如果您能提出任何建议,我将不胜感激。

Gui*_*uza 5

我终于找到了出路。为遇到相同问题的任何人提供一些文档。

我想做的是...

我的主要目标是在实时AWS Elastic Beanstalk(EB)服务器上测试Laravel 5.7应用程序。我还需要一种使用phpMyAdmin可视化数据的方法,该工具可以满足我的需求。这是一个非常简单的CRUD应用程序,仅用于学习这两种技术的基础知识。

我做了什么(工作)

遵循主要使用Web控制台创建EB应用程序的正常工作流程。

  1. 命名应用
  2. 选择PHP作为平台
  3. 从基本应用程序开始(尚未上传代码)
  4. 点击配置更多选项
  5. 在安全卡中,选择您的密钥对并保存。(这对于在服务器上进行SSH很有用
  6. 在数据库卡中创建一个RDS实例。选择适合您需要的任何选项并设置用户名/密码。
  7. 创建环境。

一段时间后,您应该在应用程序环境中拥有由EB创建的所有资源(EC2和RDS实例,安全组,EIP,存储桶等)。

准备您的Laravel应用程序是一个简单的过程。您一定不要忘记更改config / database.php来读取服务器变量。我的方法是在文件开头定义它们。

问题的主要根源在于将服务器实例配置为包括应用程序所需的所有软件和配置以及特定需求。这是通过在.yaml文件.ebextensions夹中包含文件来完成的。该文件夹应位于laravel应用程序的根目录中。在将另一个应用程序版本提交给EB之前,检查语法也是一个好主意。根据我的需要,我使用了此脚本该脚本在我部署新版本时基本上会安装phpMyAdmin。专门为此启动脚本定义环境变量,即使$PMA_VER, $PMA_USERNAME, $PMA_PASSWORDphpMyAdmin工作。您可以在EB配置页面的“软件”选项卡中创建更多环境变量。阅读文档。

Laravel和MySql版本会导致另一个可能导致在使用yaml脚本启动时运行命令时出现问题的细节(特别是migration)。例如,我使用Laravel 5.7,而EB RDS创建向导中的默认mySql版本选项类似于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`))
Run Code Online (Sandbox Code Playgroud)

如果这是您的情况,尽管您应该已经进行了搜索并整理,但将代码行添加Schema::defaultStringLength(191);app / Providers / AppServiceProviders.php文件的启动函数中将可以解决问题。

您可以通过传递脚本来进行典型迁移:

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

  02_initdb:
    command: 
      "php artisan migrate"
Run Code Online (Sandbox Code Playgroud)

这将删除现有表以避免冲突,并根据您的代码创建一个新表。您可以通过SSH和获取的内容从服务器中读取更多日志/var/log/eb-activity.log