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

时间:2018-11-20 23:26:17

标签: laravel amazon-web-services amazon-elastic-beanstalk

出于测试目的,我很难在AWS Elastic Beanstalk上部署Laravel应用。 跟踪了我在Web上可以找到的所有资源,包括AWS文档。

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

基于Maximilian's教程,我在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平台使用在64位Amazon Linux / 2.8.4上运行的PHP 7.2 RDS使用MySQL 5.6.40

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

1 个答案:

答案 0 :(得分:2)

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

我正在尝试做的事...

我的主要目标是在实时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提交另一个应用程序版本之前,check your syntax也是一个好主意。根据我的需要,我使用了this script,它在我部署新版本时基本上会安装phpMyAdmin。专门为此启动脚本定义环境变量,即$PMA_VER, $PMA_USERNAME, $PMA_PASSWORD,以便phpMyAdmin起作用。您可以在EB配置页面的“软件”选项卡中创建更多环境变量。阅读文档。

另一个可能导致在使用yaml脚本启动时运行命令时出现问题的细节(尤其是迁移)是由Laravel和MySql版本引起的。例如,我正在使用Laravel 5.7,并且EB RDS创建向导中的默认mySql版本选项类似于5.6.x。这将引发type的问题:

  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`))

如果这是您的情况,尽管您应该已经googled,并且已经整理出将代码行Schema::defaultStringLength(191);添加到您的 app / Providers / AppServiceProviders.php < / strong>文件即可解决问题。

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

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

  02_initdb:
    command: 
      "php artisan migrate"

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