linux AWS弹性Beanstalk正在跳过数据库:迁移,获取错误的RAILS_SKIP_MIGRATIONS值

vwkv1x7d  于 2022-12-03  发布在  Linux
关注(0)|答案(2)|浏览(70)

我在Elastic Beanstalk上使用Ruby 2.7,正如AWS文档中所描述的。我运行的是Rails 6.1.4.1。Rake是13.0.6。
Beanstalk是否执行db:migrate应该取决于RAILS_SKIP_MIGRATIONS的值,它的默认值为false。

commands:
  01_install_yarn:
    command: npm install yarn -g
  02_symlink_yarn:
    command: ln -s -f "$(npm bin --global)"/yarn /usr/bin/yarn
  03_install_dependencies:
    command: yum install postgresql-devel
option_settings:
  aws:elasticbeanstalk:application:environment: 
    RAILS_SKIP_MIGRATIONS: false

实际上,我可以肯定该值为false,因为当我连接到Beanstalk示例时,可以在该示例上看到它。
如果对主机执行ssh并运行sudo cat /opt/elasticbeanstalk/deployment/env,您将看到环境的转储--所有配置参数以及注入的RDS变量。

$ sudo cat /opt/elasticbeanstalk/deployment/env
PATH=/opt/elasticbeanstalk/.rbenv/shims:/opt/elasticbeanstalk/.rbenv/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
RACK_ENV=production
RAILS_SKIP_MIGRATIONS=false
RAILS_SKIP_ASSET_COMPILATION=false
BUNDLE_WITHOUT=test:development
(etc)

但是,/var/log/eb-engine.log始终跳过迁移,并显示以下内容:

2021/11/11 23:17:52.261630 [INFO] Running command /bin/su webapp -c bundle exec /opt/elasticbeanstalk/config/private/checkforraketask.rb db:migrate
2021/11/11 23:17:57.083890 [INFO] Found db:migrate task in Rakefile
2021/11/11 23:17:57.083955 [INFO] Skipping db:migrate task (RAILS_SKIP_MIGRATIONS=true).
2021/11/11 23:17:57.083968 [INFO] Executing instruction: configure log streaming

它显示的是真的而不是假的!我一辈子也想不出为什么。
我可能会使用container_command来强制执行任务,但我真的想知道发生了什么。这是Beanstalk中的bug吗?我似乎无法进一步跟踪它; checkforraketask看起来就像这样:

require 'rake'

Dir.chdir '/var/app/staging'

Rake.application.init
Rake.application.load_rakefile

tasks = Rake.application.tasks.collect(&:name)
exit 0 if tasks.include? ARGV[0]
exit 1

Rakefile这样:

require_relative "config/application"

Rails.application.load_tasks

lib/tasks中没有任务,所以我假设这个输出来自最后一行。我卡住了。我如何让Beanstalk识别正确的值并运行迁移?

c7rzv4ha

c7rzv4ha1#

我也很想知道这个问题的答案。
作为一种解决方法,我创建了以下ebextension来解决该问题:
.ebextensions/03_rake-db-migrate.配置文件

container_commands:
  rake_db_migrate:
    command: "RAILS_ENV=production bundle exec rake db:migrate"
r3i60tvu

r3i60tvu2#

是否正在跳过资源编译(RAILS_SKIP_ASSET_COMPILATION=true)?
在我的例子中,当为true时,移转也会略过。

相关问题