2012-08-25 28 views
2

我以为我明白Bundler是如何处理宝石的,但在最近发生的事情之后,我不确定我是否正确。不了解Bundler与宝石的互动

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

之后,我无法运行“rake [任何]”。每次我这样做,我收到了一个错误:

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

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

gem 'rake', '0.9.3.beta.1' 

在我的Gemfile和运行

bundle update rake 

解决这个问题,但是,我仍然不知道这里发生了什么。如果我以前使用9.2.2,为什么这样突然爆炸,我怎么能在将来防止这种情况呢?

+0

您使用的是rvm还是rbenv? – deefour

+0

@Deefour - 都不是。 – JasCav

回答

0

你真的应该考虑安装和使用RVMRbenv来管理你的Ruby版本和gemsets。如果您使用Rbenv方式,则可以使用插件来管理与RVM原生方式相似的gemsets。

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

你的最后一个bundle执行和安装之间的一些点/配置/运行的RubyMine您必须已经安装rake 0.9.3.beta.1。由于您不是通过像RVM或Rbenv那样的宝石管理您的宝石,因此Rake的默认版本变为0.9.3.beta.1,而不是捆绑器安装的版本0.9.2.2

上述错误提示您Gemfile有这样的事情

gem 'rake', '0.9.2.2' 

不允许使用耙的版本是什么,但0.9.2.2

如果你做实际上除了0.9.3.beta.1和你Gemfile0.9.2.2您的系统配置为0.9.2.2,而不是运行

rake some:task 

可以运行

bundle exec rake some:task 

和打捆会通过0.9.2.2版本的耙子运行some:task。无论使用RVM还是Rbenv,通过与bundle exec ...捆绑器在Gemfile中找到的与gems相关的任务都被认为是良好实践。

你可以阅读约bundle exechere

+0

我会研究RVM。但是......询问你的回答......我想我的Gemfile中有这样的一行 - 但事实并非如此。这让我感到困惑。 (但是...我的Gemfile.lock在它里面有= 0.9.2.2 - 我只是不知道那是怎么回事。) – JasCav

+0

如果它在'Gemfile.lock'中,并且没有显式地设置在你的'Gemfile'中,它被指定为你的'Gemfile'中**是**的许多宝石之一的依赖。 – deefour

4

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

转到: 运行 - >编辑配置 - >默认设置 - >耙 - >捆扎机标签并选中 “在捆绑的上下文中运行脚本(束EXEC)”

删除所有任务已经创建并且下一次再次创建它们时将应用默认值。您也可以单独配置每个创建的任务。