EC2:Laravel迁移与实例运行次数相同

时间:2018-11-13 14:34:33

标签: laravel amazon-web-services amazon-ec2

我们目前遇到一个非常奇怪的问题。我们的技术堆栈涉及AWS Elastic Beanstalk,EC2和Laravel通过Bitbucket Pipelines部署代码。

问题是,只要我们在部署中包含迁移,它就会运行两次(与在此环境中的EC2实例一样多!)。

我们的脚本位于['s','t']目录下:

.ebextensions

我们最终中断了几次部署,因为系统无法告知此迁移已在运行。

有人以前见过这个问题吗?

更新 我们提出了此实现,因为如果添加,MySQL连接将被拒绝 option_settings: "aws:elasticbeanstalk:container:php:phpini": document_root: /public container_commands: 01initdb: command: "php artisan migrate" 在构建脚本中。

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点:

  1. 只有一台ops服务器运行所有仅需要在一台服务器上运行的任务。您的位桶管道可以触发此ops服务器执行单服务器任务,其他触发多服务器任务。
  2. 创建一个自定义Artisan命令,该命令会获得锁(数据库或缓存)以运行迁移,同时避免并行运行/竞争条件。
  3. 按顺序触发部署(不知道在Beanstalk上是否可行)。
  4. 正如OP所述,在Elastic Beanstalk脚本上设置leader_only: true标志以仅在单个实例上运行命令就可以了!