你已经激活了 X,但是你的 Gemfile 需要 Y

Posted

技术标签:

【中文标题】你已经激活了 X,但是你的 Gemfile 需要 Y【英文标题】:You have already activated X, but your Gemfile requires Y 【发布时间】:2011-09-13 03:55:06 【问题描述】:

运行rake 时出现此错误:

您已经激活了 rake 0.9.2,但您的 Gemfile 需要 rake 0.8.7。考虑使用 bundle exec。

使用bundle exec rake 而不仅仅是rake 似乎可行,但这是解决此问题的最佳方法吗?

【问题讨论】:

这也是RVM 如此出色的工具的原因。它将允许您为每个项目拥有一组单独的 gem,这样您就不必担心再次发生这种情况。 【参考方案1】:

刚用过:bundle update

在我的例子中,它解决了我的 Gemfile.lock 文件的依赖版本问题,它用最新版本更新了包。

【讨论】:

【参考方案2】:

您不妨删除 Gemfile.lock 文件并运行 bundle install 或只是bundle,然后再试一次。

【讨论】:

【参考方案3】:

另一种不用每次都输入的方法是使用 Makefile,例如

rake :
    bundle exec rake

【讨论】:

【参考方案4】:

试试bundle clean --force

它会删除不在此捆绑包中的所有系统 gem

【讨论】:

【参考方案5】:

如果您有理由保留当前版本 rake(或任何其他导致问题的 gem),matt 是正确的,最好的方法是运行 @987654323 @。这将使用您的 Gemfile 中指定的版本,而不是使用您已安装的最新版本的 gem。 (nathan.f77 有一个很好的解决方案 below,如果你不想每次运行 rake 时都输入 bundle exec

否则,如果没有理由不更新rake,可以运行

bundle update rake

这实际上会更新您的 Gemfile.lock 以使用最新版本的 rake,而不必每次都运行 bundle exec

注意:如果您只运行bundle update,这将更新您的 Gemfile 中的所有 gem 而不仅仅是 rake,这可能不是您想要的,因为如果您的应用程序出现问题,您不知道是哪个 gem 更新引起的。


不使用bundle exec而保留旧版本的不太推荐的方法是卸载新版本的rake。

$ gem 卸载 rake 选择要卸载的 gem: 1. rake-0.8.7 2. 耙子-0.9.2 3.所有版本 > 2 成功卸载 rake-0.9.2

这可行,但如果您正在使用使用不同版本 rake 的多个应用程序,这可能会很痛苦,因为您会发现自己经常需要安装和卸载不同的版本。

【讨论】:

这对我有用。由于某种原因,只安装了一个版本(0.8.7)。所以首先我做了gem install rake。然后gem uninstall rake 并选择了 0.9.2。 bundle update 还会将任何未指定版本的 gem 更新为可用的最新版本。那可能不是你想要的。 bundle update rake 会更珍贵。 我对@9​​87654333@ 而不是rake 有同样的问题。不幸的是,运行bundle update public_suffix 没有效果。【参考方案6】:

使用bundle exec正确的方法。

基本上发生的事情是您已将 rake 更新到 0.9.2,这与 Gemfile 中指定的版本冲突。以前最新版本的rake 与您的 Gemfile 中的版本相匹配,因此您在简单地使用rake 时不会收到任何警告。

Yehuda Katz(最初的 Bundler 开发人员之一)在 this blog post 中解释了这一切。

为避免一直输入bundle exec ...,您可以在shell 中为您通常与Bundler 一起使用的命令设置别名或函数。例如,这是我用于 Rake 的:

$ type bake
bake is a function
bake () 
 
    bundle exec rake "$@"

【讨论】:

这篇博文并没有真正解释太多。真正的问题是:为什么原始 ruby​​ 没有获得 正确 依赖项,为什么 then 抱怨有错误的依赖项?【参考方案7】:

bundle exec 是正确的,但您不想每次都输入它。

你可以把它放在你的 .bashrc 中:

# Automatically invoke bundler for rake, if necessary.
rake()  if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; 

【讨论】:

澄清一下,.bashrc 文件可能位于您的主目录 [~/.bashrc] 中。每次打开新的终端窗口时都会加载此文件。【参考方案8】:

哦! Katz 的文章很棒!

我最喜欢这个解决方案:

bundle install --binstubs

以便您现在可以输入

bin/rake .stuff.

对于像我这样同时开发 2.3 和 3.0.9 应用程序的人来说,这让我感觉好多了。

【讨论】:

【参考方案9】:

上次发生这种情况时,我已经更新了我所有的宝石。我做了一个gem uninstall rake,它列出了版本选项。我选择了较新的,然后我不必再使用bundle exec

基本上,如果您使用bundle exec,它会使用您的包中安装的任何 gem 版本,那么 Gemfile 中的内容。如果没有bundle exec,它将使用您系统默认的任何版本。

【讨论】:

以上是关于你已经激活了 X,但是你的 Gemfile 需要 Y的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用rspec,但是得到了一个错误,即rspec-core 2.2.1已被激活,但是我的Gemfile需要rspec-core 2.1.0

ruby 把它放在你的Gemfile中,来自redmine ;-)

我们无法在此设备上激活windows,因为无法连接到你的组织的激活服务器。请确保已连接到你的组织服务器,然后重试。如果仍存在激活问题,请联系组织的支持人员,错误代码:ox80070078

你的windows许可证即将过期,你需要从“电脑设置”中激活windows!!

新买的笔记本电脑怎样激活windows

Ruby 中的“Gemfile”在哪里?