Gemfile中的条件ruby平台规范

时间:2014-02-26 18:33:47

标签: ruby heroku rvm jruby bundler

我想利用heroku功能在Gemfile中根据https://blog.heroku.com/archives/2012/5/9/multiple_ruby_version_support_on_heroku指定我的Ruby版本。但是,虽然我想在heroku上运行JRuby,但我希望能够在CRuby上进行一些开发。问题是,当我.ruby-version文件中的ruby规范与Gemfile中的ruby规范不同时,每当我尝试运行任何东西时,我都会收到以下抱怨:

Your Ruby engine is ruby, but your Gemfile specified jruby

有什么方法可以避免这个问题,而不必在CRuby中修改我的Gemfile?特别是,我可以在Gemfile中对ruby进行规范,条件是这样的投诉会在开发过程中消失,但它仍然会对heroku生效(并且不会使travis生效)。

我尝试使用以下命令将gem规范约束到生产组:

group :production do
  ruby ruby '1.9.3', engine: 'jruby', engine_version: '1.7.9'
end

但这对开发没有任何影响。

更新:意识到Gemfile“只是红宝石”,我根据我看到的Heroku上可用的环境变量的存在插入了一个标准的ruby if语句,而不是其他地方(即DYNO),但我仍然感兴趣的是,是否有一种方法可以做到更多主线。

1 个答案:

答案 0 :(得分:0)

尝试类似:

#ruby=1.9.3
source 'https://rubygems.org'
if ENV["JRUBY"] || RUBY_PLATFORM == "java"
# https://devcenter.heroku.com/articles/ruby-support#ruby-versions
ruby '1.9.3', engine: 'jruby', engine_version: '1.7.10'
else
ruby '1.9.3'
end

注意:第一个注释是针对RVM的,因为在解析ruby声明时可能会感到困惑