如何在AWS Elastic Beanstalk上执行Laravel Artisan迁移?

osk*_*rth 9 php amazon-web-services amazon-rds laravel amazon-elastic-beanstalk

我有一个Laravel安装,并设置了三个具有自己相应配置目录的环境:

  • 本地
  • 分期
  • 生产

我使用此处php artisan migrate:make create_users_table描述的etc 来创建数据库迁移.

在我的本地环境中,我使用Vagrant和简单的MySQL服务器设置,在登台和制作时我使用AWS RDS.

要为登台 环境配置数据库访问,我有一个app/config/staging/database.php包含以下设置的文件:

...
"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" => "",
),
...
Run Code Online (Sandbox Code Playgroud)

我使用git的部署与应用程序git aws.push描述这里.

问题是:如何在部署时在我的登台(以及后期制作)EBS服务器上运行迁移?

osk*_*rth 18

我通过在我的项目的根目录中创建一个名为的新目录来解决它.ebextensions.在该目录中,我创建了一个脚本文件my-scripts.config:

.ebextensions/
    my-scripts.config
app/
artisan
bootstrap
...
Run Code Online (Sandbox Code Playgroud)

my-scripts.config当EBS部署时,该文件被执行,是一个YAML文件,如下所示:

container_commands:
    01-migration:
        command: "php /var/app/ondeck/artisan --env=staging migrate"
        leader_only: true
Run Code Online (Sandbox Code Playgroud)

将目录和文件添加到git,commit和run git aws.push,它将被迁移.

.ebextensions可以在此处找到有关工作原理的说明.

路径/var/app/ondeck是脚本运行时应用程序所在的位置,之后会被复制到其中/var/app/current.

artisan选项--env=staging对于告诉工匠应该运行什么环境非常有用,这样它就可以从中找到正确的数据库设置app/config/staging/database.php

如果您需要快速而肮脏的方式来记录迁移命令失败的原因,您可能需要尝试类似的操作,"php /var/app/ondeck/artisan --env=staging migrate > /tmp/artisan-migrate.log"以便您可以登录ec2实例并检查日志.


Mat*_*ara 6

在oskarth回答之后,过去几年中有关 AWS Elastic Beanstalk 如何部署新应用程序版本的一些说明可能已更改。根据与.ebextensions的container_commands相关的AWS文档,如果未设置“cwd”选项,则工作目录是解压应用程序的暂存目录。这意味着在部署过程中实例下的用户将位于/var/app/staging/,即提取的应用程序源版本所在的位置。因此,artisan 命令可以单独执行,也可以通过var/app/staging/路径而不是/var/app/ondeck/执行,如下所示:

container_commands:
01-migration:
    command: "php artisan --env=staging migrate"
    leader_only: true
Run Code Online (Sandbox Code Playgroud)

或这个

container_commands:
01-migration:
    command: "php /var/app/staging/artisan --env=staging migrate"
    leader_only: true
Run Code Online (Sandbox Code Playgroud)

我已经使用上面的两种配置部署了我的项目。我发现,经过几个小时查看eb-engine.log文件并一遍又一遍地阅读文档。我希望任何人在读完这篇文章后也能花这么长时间。eb logs可以在终端、环境控制台或通过与环境关联的S3 存储桶上输入命令来访问日志。文档中几乎解释了所有内容。我没有对oskarth答案发表评论,我还不允许!

附:/var/app/staging路径与 laravel 中的暂存环境无关。