与大多数Rails开发人员一样,我的系统上有很多Rails应用程序 - 运行不同版本的Rails。结果,我现在有了多个版本的Rake(0.8.7和0.9.2)。
每个应用程序都部署在自己的VPS上,只运行一个版本的Rails和一个版本的Rake。
此外,这些项目中还有其他开发人员拥有自己的设置,可能有也可能没有相同(或两者)版本的Rake。
管理此操作的最佳做法是什么?
我应该在我的Gemfile中指定一个Rake版本(对于Rails 3应用程序,使用Bundler)?如果我这样做,那么我总是需要bundle exec rake
,这很好 - 但我想知道这是否是现在的标准。每个人都必须这样做吗?有没有办法避免它?
另外,as noted elsewhere,我必须用
更新我的Rakefilerequire 'rake/dsl_definition'
include Rake::DSL
如果我想使用Rake 0.9.2。即使这样,我也会收到这些警告:
/Library/Ruby/Gems/1.8/gems/rake-0.9.2/lib/rake/file_utils.rb:10: warning: already initialized constant RUBY
/Library/Ruby/Gems/1.8/gems/rake-0.9.2/lib/rake/file_utils.rb:84: warning: already initialized constant LN_SUPPORTED
我应该在我的Gemfile中指定0.8.7吗?好像我应该能够使用0.9.2。
我(a)需要服务器上的应用程序在没有bundle exec
的情况下工作,所以像rake db:migrate
那样简单的工作,以及(b)需要能够与其他开发人员很好地协作的东西。
人们如何处理这个问题?什么似乎运作良好?什么不是?
非常感谢任何反馈!
答案 0 :(得分:4)
如果您使用RVM和gemsets,则可以一起避免bundle exec问题。
例如,我制作的每个应用或项目都有自己的宝石集。
使用示例:
rvm use 1.9.2; rvm gemset create foobar
然后在应用程序.rvmrc文件中:
rvm use 1.9.2@foobar
这将使rvm使用正确的gemset,你不会发生版本冲突或者终身使用bundle exec。
创建.rvmrc文件后,不要忘记cd out然后重新登录或发出
rvm reload
开始使用新的gemset
答案 1 :(得分:3)
使用捆绑包并使用bundle exec rake
调用正确的版本几乎是可行的方法。也就是说,输入所有内容的速度很快。
您可以做的是bundle install --binstubs
,它将包含您使用的宝石的可执行存根。然后,您只需致电(例如)bin/rake cucumber:ok