我在Elastic Beanstalk上运行标准的Rails 4.2.0应用程序。容器是运行Ruby 2.1.4,Puma 2.9.1和Nginx 1.6.2的64位Amazon Linux 2014.09 v1.0.9。
将代码推送到此环境时,在puma.log中出现以下错误:“您已经激活了机架1.5.2,但是您的Gemfile需要机架1.6.0。在命令中添加bundle exec
可能会解决此问题。”
我不记得几个月前进行测试时看到这些错误,而且似乎是间歇性的。有时,我推送后一切正常,而其他时候我推送却失败了。
https://forums.aws.amazon.com/thread.jspa?messageID=599675建议/opt/elasticbeanstalk/support/conf/puma.conf
中可能存在错误,但是我已经对该文件进行了修补,并且仍然发生错误。我还确保我的Gemfile中必须装有彪马和架子。
使我的EC2实例加载正确版本的机架的最适合生产且可持续的方式是什么?
最佳答案
经过大量的反复试验,这对我有用。
从Gemfile
删除puma和机架。运行bundle install
。这是我的Gemfile
的样子。
# Gemfile
source 'https://rubygems.org'
gem 'ahoy_matey'
gem 'aws-sdk'
gem 'bcrypt'
gem 'cancancan'
gem 'coffee-rails'
gem 'font-awesome-rails'
gem 'foundation-rails'
gem 'gibbon'
gem 'jbuilder'
gem 'jquery-infinite-pages'
gem 'jquery-rails'
gem 'kaminari'
gem 'mandrill_mailer'
gem 'modernizr-rails'
gem 'nokogiri'
gem 'omniauth-facebook'
gem 'omniauth-twitter'
gem 'owlcarousel-rails'
gem 'paper_trail'
gem 'pg'
gem 'rails'
gem 'rails_admin'
gem 'sanitize'
gem 'sass-rails'
gem 'sentry-raven'
gem 'stripe'
gem 'twitter-typeahead-rails'
gem 'uglifier'
gem 'whenever'
group :test, :development do
gem 'dotenv-rails'
end
group :development do
gem 'spring'
end
group :doc do
gem 'sdoc'
end
在仓库的
.ebextensions/
文件夹中,创建一个脚本以将机架1.6.0安装为本地gem。# .ebextensions/00-install-local-gems.config:
commands:
# add rack 1.6.0 to $GEM_ROOT so puma can activate it instead of rack 1.5.2
# use actual path not $GEM_ROOT because env vars are not available here
# make sure puma and rack are not in app's Gemfile or there will be blood
00_install_rack_160:
command: gem install -i /opt/rubies/ruby-2.1.4/lib/ruby/gems/2.1.0 rack -v 1.6.0
将
Gemfile
,Gemfile.lock
和.ebextensions/00-install-local-gems.config
提交到您的仓库中。将代码推送到Elastic Beanstalk。现在,您应该终止所有现有实例。 Elastic Beanstalk将使用此更新的配置重新创建它们。
我可以确认上述作品适用于均运行Ruby 2.1(Puma)的64位Amazon Linux 2014.09 v1.2.0和v1.0.9。
关于ruby-on-rails - Elastic Beanstalk间歇性地激活机架1.5.2,但是我的Gemfile需要机架1.6.0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29334394/