我在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识别正确的值并运行迁移?
2条答案
按热度按时间c7rzv4ha1#
我也很想知道这个问题的答案。
作为一种解决方法,我创建了以下ebextension来解决该问题:
.ebextensions/03_rake-db-migrate.配置文件
r3i60tvu2#
是否正在跳过资源编译(RAILS_SKIP_ASSET_COMPILATION=true)?
在我的例子中,当为true时,移转也会略过。