我试图将我的rails应用程序部署到aws弹性beanstalk,并在本文的指导下进行。
开始之前,"使用PostgreSQL和Rails"部分,我没有问题。
在那部分中,我遵循了gemfile修改,它将postgreSQL gem添加到生产组,并将sqlite3 gem移动到开发和放大。测试组,就像我做其他rails应用程序一样。
喜欢这个
group :development, :test do
# Before insert this group, sqlite3 gem code is in the default group. (Outside of development group)
gem 'sqlite3', '~> 1.3.10'
...other gems...
end
group :production do
gem 'pg', '~> 0.18.1'
end
之后,我$ bundle install
,$ git commit
和$ eb deploy
。但是在这个时候,EBS使用以下消息犯了错误
错误:[实例:i-80ee5327]命令在实例上失败。退货代码: 1输出:(TRUNCATED)... sqlite3'`到您的Gemfile(并确保它的 版本是ActiveRecord所要求的最低值。
Gem :: LoadError:sqlite3不是捆绑包的一部分。将其添加到Gemfile。
任务:TOP => db:migrate => db:load_config(通过运行查看完整跟踪 任务--trace)。
挂钩/opt/elasticbeanstalk/hooks/appdeploy/pre/12_db_migration.sh 失败。有关更多详细信息,请使用控制台检查/var/log/eb-activity.log 或EB CLI。
INFO:在所有实例上完成命令执行。摘要: [成功:0,失败:1]。
错误:在实例ID' i-80ee5327'上执行命令失败。 中止行动。
错误:无法部署应用程序。
通过读取错误消息,我发现ssite3 gem没有被aws实例加载,所以我把sqlite3 gem代码放到了开发组之外。
gem 'sqlite3', '~> 1.3.10'
group :development, :test do
...other gems...
end
group :production do
gem 'pg', '~> 0.18.1'
end
之后,$ eb deploy
命令运行良好,服务器正常工作。
所以,我的问题是......为什么会出现这个问题?
在我看来,如果我使gemfile像第二版一样,sqlite3适配器在默认环境下加载,应该在生产环境中崩溃。但结果与我完全相反。这是非常烦人的情况,更重要的是,我怀疑我是否正在做出正确的解决方案。
请帮帮我......
这是我当前的环境变量。
RACK_ENV = development
SECRET_KEY_BASE = **********
RAILS_SKIP_MIGRATIONS = false
RAILS_SKIP_ASSET_COMPILATION = false
BUNDLE_WITHOUT = test:development
答案 0 :(得分:4)
看来你正在开发模式下运行beanstalk服务器。确保在beanstalk中设置了以下env变量:
RAILS_ENV=production
RACK_ENV=production