您已经激活了X,但您的Gemfile需要Y.

min*_*eow 115 ruby rubygems bundler

运行时rake我收到此错误:

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

使用bundle exec rake而不只是rake似乎工作,但它是解决这个问题的最佳方法吗?

mat*_*att 81

使用bundle exec 正确的方法.

基本上发生了什么,你已经将rake更新为0.9.2,现在与你的Gemfile中指定的版本冲突.以前最新版本rake的版本与Gemfile中的版本相匹配,因此在使用时没有收到任何警告rake.

Yehuda Katz(最初的Bundler开发者之一)在这篇博文中解释了这一切.

为了避免一直打字bundle exec ...,您可以在shell中为通常与Bundler一起使用的命令设置别名或功能.例如,这就是我用于Rake的内容:

$ type bake
bake is a function
bake () 
{ 
    bundle exec rake "$@"
}
Run Code Online (Sandbox Code Playgroud)

  • 博客文章并没有真正解释太多.真正的问题是:为什么处女红宝石得不到_right_依赖,为什么_then_抱怨错误的? (2认同)

Rya*_*yan 59

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

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

bundle update rake
Run Code Online (Sandbox Code Playgroud)

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

注意:如果你只运行bundle update这将更新你的Gemfile中的所有宝石,而不仅仅是rake,这可能不是你想要的,因为如果你的应用程序出现问题,你将无法知道哪个宝石更新导致它.


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

$ gem uninstall rake

Select gem to uninstall:
 1. rake-0.8.7
 2. rake-0.9.2
 3. All versions
> 2
Successfully uninstalled rake-0.9.2

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

  • ```bundle update```也将更新任何没有指定最新版本版本的宝石.这可能不是你想要的.```捆绑更新rake```将是更多的precies. (7认同)

Ole*_*sar 31

尝试 bundle clean --force

它删除不在此捆绑包中的每个系统gem

  • 运行 rspec 时,在 RubyMine 中遇到此错误,bundle clean --force,然后当再次运行 rspec 时,RubyMine 将自动安装正确的版本。 (4认同)

paa*_*had 13

上次这发生在我身上,我更新了所有的宝石.我做了一个gem uninstall rake和它列出的版本选项.我选了新的,然后我就不用bundle exec了.

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


nes*_*sur 8

哦!Katz的文章很棒!

我最喜欢这个解决方案:

bundle install --binstubs
Run Code Online (Sandbox Code Playgroud)

这样你就可以输入了

bin/rake .stuff.
Run Code Online (Sandbox Code Playgroud)

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


ndb*_*ent 8

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; }
Run Code Online (Sandbox Code Playgroud)


Ind*_*our 6

刚刚使用:bundle update

就我而言,它解决了 Gemfile.lock 文件的依赖版本问题,它使用最新版本更新了软件包。