15

我的问题已经在这里被问过,但我试图了解其背后的原因,而不是如何解决它。

我得到的错误是;

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”,或者为“bundle 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.

任何解释将不胜感激。

编辑:
我的应用程序的所有宝石都在一个宝石集中,我再次更新了我的宝石。更新不应该确保相关的 gem 兼容吗?

4

3 回答 3

34

当您在系统中安装的gem 比在Rails 应用程序中安装的gem 更新时,就会发生这种情况。

Bundler 只是告诉你必须坚持你的 Gemfile 状态。

这是运行的目的:

bundle exec rake db:migrate

-> 运行与 Gemfile 提供的完全相同的 rake 版本。

关于从 gemfile 更新 gem,只需执行以下操作:

bundle update

避免这种无聊事情的最简单方法是通过创建 gemset 来隔离你的 gem。为此,我使用 RVM。

于 2011-10-27T16:04:45.693 回答
1

关于 rake 版本 0.9.2.2,任何一种方法都是为项目创建一个新的 gemset 并维护与您的 Gemfile 匹配的 gem 版本。

例如,如果有两个包含版本 0.9.2 和 0.9.2.2 的 rake gem,指定 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

于 2012-04-12T14:50:20.603 回答
0

正如@apneadiving 所说,运行“$bundle install”会更新你所有的bunldes。但是,在运行“$bundle install --binstubs”之后,每当我省略“bundle exec”部分时,我仍然会遇到不兼容的 gems 错误。

随后我需要更新我的 Gemfile,因为我添加了另一个 gem,现在它们可以工作了。我假设宝石创建者解决了不兼容问题。

于 2011-11-07T09:41:50.617 回答