我们目前遇到了一个非常奇怪的问题。我们的技术栈涉及 AWS Elastic Beanstalk、EC2 和 Laravel,并使用 Bitbucket Pipelines 部署代码。
问题在于,每当我们在部署中包含一个迁移时,它会被运行两次(在此环境中 EC2 实例的数量一样多)。
我们的脚本位于 ".ebextensions" 目录下:
问题在于,每当我们在部署中包含一个迁移时,它会被运行两次(在此环境中 EC2 实例的数量一样多)。
我们的脚本位于 ".ebextensions" 目录下:
option_settings:
"aws:elasticbeanstalk:container:php:phpini":
document_root: /public
container_commands:
01initdb:
command: "php artisan migrate"
由于系统无法检测到此迁移已经运行,我们最终多次破坏了部署。
有人遇到过这个问题吗?
更新
由于在构建脚本中添加php artisan migrate
会导致MySQL连接被拒绝,因此我们想出了这种实现方法。
php artisan:migrate
依赖于一个migrations
表来知道哪些迁移已经运行,哪些没有。只要这个表在多个实例之间正确共享,多次运行它不应该导致任何冲突...除非你遇到了竞争条件。 - shengmigrations
的东西跟踪了后者。 我也是这么想的。实例之间的竞争条件导致了部署中的问题。 - thitami