Rails aws 弹性 beantalk 使用数据库适配器部署错误

cas*_*mia 4 sqlite postgresql rubygems ruby-on-rails amazon-elastic-beanstalk

我正在尝试根据本文的指导将我的 rails 应用程序部署到 aws elastic beanstalk。

https://medium.com/@jatescher/how-to-set-up-a-rails-4-2-app-on-aws-with-elastic-beanstalk-and-postgresql-3f9f29c046e2#.tnssj8z0o

在开始之前,“在 Rails 中使用 PostgreSQL”部分,我没有遇到任何问题。

在那个部分,我遵循了 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
Run Code Online (Sandbox Code Playgroud)

之后,我$ 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 失败。有关更多详细信息,请使用控制台或 EB CLI 检查 /var/log/eb-activity.log。

信息:命令在所有实例上执行完毕。摘要:[成功:0,失败:1]。

错误:对实例 ID 'i-80ee5327' 的命令执行失败。中止操作。

错误:无法部署应用程序。

通过阅读错误消息,我发现 aws 实例未加载 sqlite3 gem,因此我将 sqlite3 gem 代码发布到开发组之外。

gem 'sqlite3', '~> 1.3.10' 

group :development, :test do
   ...other gems...
end
group :production do
   gem 'pg', '~> 0.18.1'
end
Run Code Online (Sandbox Code Playgroud)

之后,该$ eb deploy命令运行良好,服务器运行正常。

所以,我的问题是......为什么会出现这个问题?

在我看来,如果我将 gemfile 制作成第二个版本,sqlite3 适配器会在默认环境下加载,并且应该会在生产环境中崩溃。但结果与我完全相反。这是非常烦人的情况,更重要的是,我怀疑我是否正在做正确的解决方案。

请帮我...

这是我当前的环境变量。

 RACK_ENV = development 
 SECRET_KEY_BASE = **********
 RAILS_SKIP_MIGRATIONS = false 
 RAILS_SKIP_ASSET_COMPILATION = false
 BUNDLE_WITHOUT = test:development
Run Code Online (Sandbox Code Playgroud)

Tal*_*Tal 6

看来您正在开发模式下运行 beanstalk 服务器。确保在 beanstalk 中设置了以下环境变量:

RAILS_ENV=production
RACK_ENV=production
Run Code Online (Sandbox Code Playgroud)