你已经激活了 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。
这可行,但如果您正在使用使用不同版本 rake 的多个应用程序,这可能会很痛苦,因为您会发现自己经常需要安装和卸载不同的版本。
【讨论】:
这对我有用。由于某种原因,只安装了一个版本(0.8.7)。所以首先我做了gem install rake
。然后gem uninstall rake
并选择了 0.9.2。
bundle update
还会将任何未指定版本的 gem 更新为可用的最新版本。那可能不是你想要的。 bundle update rake
会更珍贵。
我对@987654333@ 而不是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