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)
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的应用程序,这可能会很麻烦,因为您会发现自己经常需要安装和卸载不同版本.
Ole*_*sar 31
尝试 bundle clean --force
它删除不在此捆绑包中的每个系统gem
paa*_*had 13
上次这发生在我身上,我更新了所有的宝石.我做了一个gem uninstall rake和它列出的版本选项.我选了新的,然后我就不用bundle exec了.
基本上,如果你使用bundle exec它使用你的bundle安装的任何gem版本,那么Gemfile中的内容.没有bundle exec它使用任何版本是您的系统默认.
哦!Katz的文章很棒!
我最喜欢这个解决方案:
bundle install --binstubs
Run Code Online (Sandbox Code Playgroud)
这样你就可以输入了
bin/rake .stuff.
Run Code Online (Sandbox Code Playgroud)
对于像我这样开发2.3和3.0.9应用程序的人来说,这让我感觉好多了.
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)