Rails aws elastic beanstalk部署错误与数据库适配器

Posted

技术标签:

【中文标题】Rails aws elastic beanstalk部署错误与数据库适配器【英文标题】:Rails aws elastic beanstalk deploy error with database adapter 【发布时间】:2016-05-01 22:36:48 【问题描述】:

在本文的指导下,我正在尝试将我的 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

在那之后,我$ bundle install$ git commit$ eb deploy。但此时,EBS 会出现以下消息错误

错误:[实例:i-80ee5327] 命令在实例上失败。返回码: 1 输出:(截断)...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”的命令执行不成功。 中止操作。

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

通过阅读错误消息,我发现 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

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

那么,我的问题是……为什么会出现这个问题?

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

请帮帮我...

这是我当前的环境变量。

 RACK_ENV = development 
 SECRET_KEY_BASE = **********
 RAILS_SKIP_MIGRATIONS = false 
 RAILS_SKIP_ASSET_COMPILATION = false
 BUNDLE_WITHOUT = test:development

【问题讨论】:

config/database.yml 中有什么? 能否在生产环境下删除“ @jae555 我在修改代码并解释它时被扭曲了。写完这个问题后,我不断地与其他安装错误作斗争,现在我完全输了。这是令人讨厌的情况,但我只是忍受它....谢谢。 【参考方案1】:

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

RAILS_ENV=production
RACK_ENV=production

【讨论】:

问题解决了!您的解决方案非常有效。顺便问一下,RAILS_ENV 和 RACK_ENV 有什么区别?我没有看到任何关于配置 RAILS_ENV 的文章。我以为 RACK_ENV 与 rails 环境有关,但 RAILS_ENV 是正确的。 @casamia 如果它是正确的答案并帮助了你,请接受它,以便其他人可以更自信地使用它。

以上是关于Rails aws elastic beanstalk部署错误与数据库适配器的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Elastic Beanstalk 上部署 rails 应用程序

AWS Elastic Beanstalk Rails Bundler 失败

使用 AWS Elastic Beanstalk 部署 Rails ActionCable

使用 MacOSX 将 Rails 应用程序推送到 AWS Elastic Beanstalk

创建 AWS Elastic Beanstalk Ruby/Rails 应用程序环境 [AWS 免费套餐] 时使用了哪些 AWS 资源/服务?

在 AWS Elastic Beanstalk / Rails 上配置 HTTPS