多个耙子版本 - 最佳实践

时间:2011-12-03 18:56:58

标签: ruby-on-rails ruby-on-rails-3 rake

与大多数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,我必须用

更新我的Rakefile
require '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)需要能够与其他开发人员很好地协作的东西。

人们如何处理这个问题?什么似乎运作良好?什么不是?

非常感谢任何反馈!

2 个答案:

答案 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