Rails与数据库适配器的弹性beanstalk部署错误

时间:2016-01-25 15:01:14

标签: ruby-on-rails postgresql sqlite rubygems elastic-beanstalk

我试图将我的rails应用程序部署到aws弹性beanstalk,并在本文的指导下进行。

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

开始之前,"使用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

1 个答案:

答案 0 :(得分:4)

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

RAILS_ENV=production
RACK_ENV=production