不了解Bundler与Gems的交互

时间:2012-08-25 03:25:48

标签: ruby-on-rails gem rake bundler rubymine

我以为我理解Bundler如何使用宝石,但是在最近发生的事情之后,我不确定我是否正确。

我正在开发一个Rails应用程序。为了开始(并且我会熟悉之前没有使用过的Rails环境),我没有使用IDE。但是,因为我错过了IDE的一些优点,所以我刚开始使用RubyMine。作为RubyMine设置的一部分,它要求更新我现有项目的所有宝石。

在那之后,我无法运行“rake [anything]”。每次我这样做,我收到的错误是:

  

你已经激活了rake 0.9.3.beta.1,但是你的Gemfile   需要rake 0.9.2.2。使用bundle exec可以解决这个问题。

我可以更新到下一版本的rake - 这不是问题 - 但我不明白首先发生了什么。发生了什么事我“激活”了一个新版本的rake。最终,我最终通过

来解决问题
gem 'rake', '0.9.3.beta.1'

在我的Gemfile中运行

bundle update rake

但是,我仍然不确定这里发生了什么。如果我之前使用的是9.2.2,那为什么会突然爆炸,我将来如何防止它?

2 个答案:

答案 0 :(得分:4)

如果您使用的是Rubymine,则应将其配置为使用bundle exec运行rake任务。

转到: 运行 - >编辑配置 - >默认值 - >耙 - > Bundler选项卡并选中“在捆绑包的上下文中运行脚本(捆绑exec )”

删除已创建的所有任务,默认将在下次再次创建时应用。您还可以单独配置每个创建的任务。

答案 1 :(得分:0)

您应该考虑安装并使用 RVM Rbenv 来管理您的ruby版本和gemsets。如果你采用Rbenv方式, rbenv-gemset 插件可用于管理类似于RVM本身的gemset。

  

你已经激活了rake 0.9.3.beta.1,但是你的Gemfile需要rake 0.9.2.2。使用bundle exec可以解决这个问题。

在上一次bundle执行和安装/配置/运行RubyMine之间的某个时刻,您必须已安装rake 0.9.3.beta.1。因为您不会通过像RVM或Rbenv这样的gemset管理您的宝石,Rake的默认版本变为0.9.3.beta.1而不是捆绑器0.9.2.2安装的版本。

上述错误表明您的Gemfile有类似

的内容
gem 'rake', '0.9.2.2'

不允许使用rake版本而不是0.9.2.2

如果除了0.9.2.2之外,您的系统上确实有0.9.3.beta.1,并且Gemfile已配置为0.9.2.2,而不是正在运行

rake some:task

你可以运行

bundle exec rake some:task

和bundler将通过some:task版本的rake运行0.9.2.2。无论使用RVM还是Rbenv,通过与Gemfile的捆绑器在bundle exec ...中找到的与宝石相关的运行任务都被视为良好做法。

您可以阅读bundle exec here