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

时间:2014-04-09 21:42:58

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

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

  • 本地
  • 分期
  • 生产

我使用php artisan migrate:make create_users_table等描述here来创建数据库迁移。

在我的本地环境中,我使用Vagrant和一个简单的MySQL服务器设置,并在staging&生产我使用AWS RDS。

要为登台 environment配置数据库访问权限,我有一个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" => "",
),
...

我使用git按照here所述的git aws.push部署应用。

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

2 个答案:

答案 0 :(得分:15)

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

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

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

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

将目录和文件添加到git,commit并运行git aws.push,它将被迁移。

有关.ebextensions中的内容如何发挥作用的解释here

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

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

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

答案 1 :(得分:1)

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

或这个

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

我已经使用以上两种配置部署了我的项目。我发现几个小时后查看 eb-engine.log 文件并一遍又一遍地阅读文档。我希望任何人阅读完后也能花这么长时间。可以在终端上,环境控制台上或通过与环境关联的S3存储桶中的eb logs命令访问public class NewFeedAdapter extends RecyclerView.Adapter<NewFeedAdapter.ViewHolder> 命令来访问日志。说明的文档中几乎包含了所有内容。我尚未在oskarth答案中未对此发表评论!

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