用于rails应用程序的Gemfile中的环境的不同ruby版本

时间:2014-06-30 01:25:29

标签: ruby-on-rails ruby capistrano3

我目前正在使用capistrano 3在多个环境中部署我的rails 4应用程序。我想尝试在开发中转向ruby 2.1.2(我在stage / prod中运行2.0.0)。假设我使用的是rbenv,是否有可能在单个Gemfile中以某种方式指定它?

我试图在我的Gemfile中关注,但无济于事:

# Gemfile
group :development do
  ruby '2.1.2'
end

group :staging, :production do
  ruby '2.0.0'
end

当cap deploy在开发上运行时,由于感知版本不匹配而中止。

Your Ruby version is 2.1.2, but your Gemfile specified 2.0.0

这是它试图运行的命令。

cd /home/rails/releases/20140701151045 && ( RBENV_ROOT=~/.rbenv RBENV_VERSION=2.1.2 RAILS_ENV=development RBENV_ROOT=~/.rbenv RBENV_VERSION=2.1.2 ~/.rbenv/bin/rbenv exec bundle exec rake assets:precompile )

非常感谢您的想法。谢谢!


更新 在从@toolz输入并查看捆绑代码之后,这是不可能的(或者一个好主意)。有几种选择:

  1. 从Gemfile中移除“ruby”条目(一切顺利)
  2. 创建单独的Gemfiles
  3. 为迁移到新的Ruby版本创建一个单独的分支
  4. 我将使用选项#3,它将解决我的问题,似乎是最好的做法。

1 个答案:

答案 0 :(得分:5)

我做到了

Gemfile

if ENV["RAILS_ENV"] == "development"
  ruby '2.0.0'
elsif ENV["RAILS_ENV"] == "production"
  ruby '2.1.0'
end

然后假设你正在使用rvm,你必须创建一个capistrano任务

rvm use 2.1.0

关于生产