Elastic Beanstalk 间歇性激活 rack 1.5.2,但我的 Gemfile 需要 rack 1.6.0
Elastic Beanstalk intermittently activates rack 1.5.2, but my Gemfile requires rack 1.6.0
我是 运行 Elastic Beanstalk 上的标准 Rails 4.2.0 应用程序。容器是64位的Amazon Linux 2014.09 v1.0.9 box 运行 Ruby 2.1.4, Puma 2.9.1 and Nginx 1.6.2.
当我将代码推送到此环境时,我在 puma.log 中收到以下错误:"You have already activated rack 1.5.2, but your Gemfile requires rack 1.6.0. Prepending bundle exec
to your command may solve this."
我不记得几个月前在测试时看到过这些错误,而且似乎是断断续续的。有时我推,一切正常,有时我推,但失败了。
https://forums.aws.amazon.com/thread.jspa?messageID=599675 表明 /opt/elasticbeanstalk/support/conf/puma.conf
中可能存在错误,但我已经修补了该文件,但错误仍然存在。我还确保我的 Gemfile 中必须有 puma 和 rack。
让我的 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/
文件夹中,创建一个脚本以将 rack 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 将使用更新后的配置重新创建它们。
我可以确认以上适用于 64 位亚马逊 Linux 2014.09 v1.2.0 和 v1.0.9,两者都是 运行 Ruby 2.1 (Puma)。
我是 运行 Elastic Beanstalk 上的标准 Rails 4.2.0 应用程序。容器是64位的Amazon Linux 2014.09 v1.0.9 box 运行 Ruby 2.1.4, Puma 2.9.1 and Nginx 1.6.2.
当我将代码推送到此环境时,我在 puma.log 中收到以下错误:"You have already activated rack 1.5.2, but your Gemfile requires rack 1.6.0. Prepending bundle exec
to your command may solve this."
我不记得几个月前在测试时看到过这些错误,而且似乎是断断续续的。有时我推,一切正常,有时我推,但失败了。
https://forums.aws.amazon.com/thread.jspa?messageID=599675 表明 /opt/elasticbeanstalk/support/conf/puma.conf
中可能存在错误,但我已经修补了该文件,但错误仍然存在。我还确保我的 Gemfile 中必须有 puma 和 rack。
让我的 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/
文件夹中,创建一个脚本以将 rack 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 将使用更新后的配置重新创建它们。
我可以确认以上适用于 64 位亚马逊 Linux 2014.09 v1.2.0 和 v1.0.9,两者都是 运行 Ruby 2.1 (Puma)。