我的问题已经被问到here,但我试图了解其背后的原因,而不是如何解决它。
我得到的错误是;
You have already activated rspec-core 2.7.1, but your Gemfile requires rspec-core 2.6.4. Using bundle exec may solve this. (Gem::LoadError)
现在我已经获得了各种解决方案,例如使用“mpapis-bundler”,或创建“捆绑exec”的简写,但我的印象是那是什么
$bundle install --binstubs
是为了。
更具体地说,由于我的gemfile中没有为rspec-rails声明版本号,为什么我有这种不兼容性?我尝试
时也发生了错误$rake db:migrate
告诉我
You have already activated rake 0.9.2.2, but your Gemfile requires rake 0.9.2. Consider using bundle exec.
任何解释都将不胜感激。
修改
我的应用程序的所有宝石都在gemset中,我再次更新了我的宝石。更新是否应确保相关的宝石兼容?
答案 0 :(得分:34)
当您在系统中安装比Rails应用程序中的更新宝石时,会发生这种情况。
Bundler只是告诉你,你必须坚持你的Gemfile状态。
这是运行的目的:
bundle exec rake db:migrate
- >运行Gemfile提供的rake版本。
关于从gemfile更新gem,只需执行:
bundle update
避免这种无聊的东西的最简单方法是通过创建gemsets来隔离你的宝石。我为此目的使用RVM。
答案 1 :(得分:1)
关于rake版本0.9.2.2,要么做的任何方法是为项目创建一个新的gemset并维护与Gemfile匹配的gem版本。
例如,如果有两个rake gem包含版本0.9.2和0.9.2.2,虽然安装了指定rake版本'0.9.2',但除了吹错误之外不执行任何任务
'你已经激活了rake 0.9.2.2,但你的Gemfile需要rake 0.9.2。使用bundle exec可以解决这个问题。'
我希望bundle install能够在Gemfile.lock中锁定gem版本并选择rake 0.9.2,但它会在gemset中查找,默认情况下rake 0.9.2.2已启用。
使用rails book提醒敏捷Web开发的捆绑安装的目的,
'bundle install将使用Gemfile.lock作为起点,并仅安装 此文件中指定的各种gem的版本。因此,它是 这个文件被检入你的版本控制系统是很重要的 将确保您的同事和部署目标都将使用 完全相同的配置。'
但它不起作用,
更好的是卸载rake 0.9.2.2并使用rake 0.9.2或者使用bundle update rake,它将Gemfile.lock中的rake版本更新为0.9.2.2
答案 2 :(得分:0)
正如@apneadiving所说,运行“$ bundle install”会更新你所有的bunldes。但是,在运行“$ bundle install --binstubs”之后,每当我省略“bundle exec”部分时,我仍然会遇到不兼容的gem的错误。
随后我需要更新我的Gemfile,因为我添加了另一个gem,现在它们正常工作。我假设宝石创作者解决了不兼容问题。