我以为我理解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,那为什么会突然爆炸,我将来如何防止它?
答案 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 。