已经激活的rake版本与Gemfile所需的版本不同,可以防止rake命令

时间:2014-04-25 07:57:11

标签: ruby-on-rails gem rake

这是我的错误:

rake aborted!
Gem::LoadError: You have already activated rake 10.3.1, but your Gemfile requires rake 10.2.2. Prepending `bundle exec` to your command may solve this.
/Users/AaronWilliamson/.gem/ruby/2.1.0/gems/bundler-1.5.3/lib/bundler/runtime.rb:34:in `block in setup'
/Users/AaronWilliamson/.gem/ruby/2.1.0/gems/bundler-1.5.3/lib/bundler/runtime.rb:19:in `setup'
/Users/AaronWilliamson/.gem/ruby/2.1.0/gems/bundler-1.5.3/lib/bundler.rb:119:in `setup'
/Users/AaronWilliamson/.gem/ruby/2.1.0/gems/bundler-1.5.3/lib/bundler/setup.rb:7:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/config/boot.rb:4:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/config/application.rb:1:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/Rakefile:4:in `<top (required)>'
LoadError: cannot load such file -- bundler/setup
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/config/boot.rb:4:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/config/application.rb:1:in `<top (required)>'
/Users/AaronWilliamson/Desktop/Ripelist-Classifieds/Rakefile:4:in `<top (required)>'
(See full trace by running task with --trace)

我无法执行任何rake任务,这似乎是我所有其他问题的根源。几天前,当我运行rake命令时,情况并非如此。任何人都可以解释这里发生了什么,以及如何让我的应用回到正轨?我撞墙了。此外,bundle exec并不能解决问题的根源。我过去从来没有这样做过,现在还没有用。

18 个答案:

答案 0 :(得分:34)

编辑2: 您应该查看bundle update并稍微更改您的工作流程。有关更多帮助,请参阅this question


原始回答

这是一个简单的问题,当您的gemset的rake版本比Gemfile.lock提到的版本号更新时会发生。

正如错误消息中所提到的,您可以使用bundle exec来解决问题。

我在这种情况下的解决方案就是删除Gemfile.lock如果我不太担心其他宝石版本及其无限的依赖关系。否则,您可以尝试删除Gemfile.lock中关于rake版本的一行。运行bundle install,世界应该再次成为一个幸福的地方。 (编辑2 :运行bundle update --source而不是此。不要这样做。)

PS:尝试将gemsets and organising your gems with rvm用于不同的项目。

修改

我现在更喜欢使用rbenv来管理安装,项目的所有宝石都使用vendor/bundle选项驻留在bundle install --path中。稍后使用bundle exec将每个gem命令作为范围。

因此,rails s变为bundle exec rails s。在我看来,如果它意味着事情会保持清洁并且诸如此类事件之类的冲突不会发生,那么更多的打字会更好。

答案 1 :(得分:31)

您可以使用rubygems-bundler来解决此问题。运行以下命令:

$ gem install rubygems-bundler

$ gem regenerate_binstubs

然后再次尝试你的耙子。

答案 2 :(得分:28)

一个对我有用的简单解决方案就是简单地运行bundle update rake

答案 3 :(得分:16)

我有一个类似的问题,我对从我的Gemfile.lock中删除一行感到怀疑,这看起来很骇人,而且每个rake命令前置bundle exec的不便也不是一个选项。我通过先进入Gemfile.lock来修复此问题,看看rake的版本是什么版本(在我的例子中是11.1.2)。我的想法是卸载rake并安装此版本。运行gem uninstall rake给出了此输出:

  

选择要卸载的gem:

     
      
  1. 耙10.5.0
  2.   
  3. 耙11.1.1
  4.   
  5. 耙11.1.2
  6.   
  7. 耙11.2.2
  8.   
  9. 耙11.3.0
  10.   
  11. 所有版本
  12.   

我同时卸载了rake-11.2.2rake-11.3.0。这解决了我的问题

答案 4 :(得分:2)

使用此:

gem install rake -v "version-you-want"

答案 5 :(得分:2)

输入以下命令:

math.fsum

答案 6 :(得分:1)

根据这个解决方案(对我有用):https://stackoverflow.com/a/23668399/4260090

您可以使用rubygems-bundler

解决此问题

在终端中输入以下命令:

$ gem install rubygems-bundler
$ gem regenerate_binstubs

它应该现在可以使用

答案 7 :(得分:1)

bundle update rake也对我有用。

我的错误是Gem::LoadError: You have already activated rake 12.3.1, but your Gemfile requires rake 12.3.0. Prepending捆绑执行程序to your command may solve this.

答案 8 :(得分:1)

尝试安装nodejs,这解决了我的问题。

如果您使用的是ubuntu,请运行此命令。

sudo apt-get install nodejs

答案 9 :(得分:0)

如前面的答案所述,这是一个简单的问题,当你的gemset的rake版本比你Gemfile.lock提到的版本号更新时会发生。

调试此方法的最简单方法是运行bundle update

其他方法可能是删除Gemfile.lock并运行bundle install,或者只是删除Gemfile.lock中与rake版本对应的行并尝试bundle install。但这有时可能会破坏Gemfile。我更喜欢第一种方法,因为它是最安全和最简单的方法。

答案 10 :(得分:0)

我有同样的错误:

您已经激活了rake 12.0.0,但您的Gemfile需要rake 11.3.0。将“bundle exec”添加到您的命令可能会解决此问题。

我通过运行bundle update

解决了这个问题

这将rake版本更新为我激活的rake版本,一切正常,我希望对你有用!

答案 11 :(得分:0)

进入null=True,找到rake文件并在那里更新版本。

我收到了这个错误:

  

Gem :: LoadError:你已经激活了rake 11.2.2,但是你的   Gemfile需要rake 11.1.2。将Gemfile.lock添加到您的命令中   可以解决这个问题。

我所做的是更改bundle exec中的rake版本: Gemfile.lockrake (11.1.2)

之后一切正常。

答案 12 :(得分:0)

我遇到了类似的问题。 我的解决方案是在文件Gemfile中更改rake版本“gem'rake','〜&gt; 10.3'”的行,删除Gemfile.lock并运行'bundler install',新的Gemfile.lock将显示新版本10.3.1 。一切都会好的。

答案 13 :(得分:0)

我尝试了另一种方法,即删除Gemfile.lock,然后运行bundle install。之后我运行rake db:migrate。一切正常。

虽然我不认为删除Gemfile.lock是不好的做法,但可能是;谁知道。

答案 14 :(得分:0)

对于Rails版本5或6,请尝试使用“ rails”命令:

rails db:migrate 

没有错误。

答案 15 :(得分:0)

我遇到了这个问题:

这是我的解决方案

解决方案1 ​​

此解决方案在很多时候都有效,只需更新引起问题的gem,例如gem为rack

bundle update rack

解决方案2

在某些情况下,解决方案1 ​​可能不起作用,因此您需要编辑Gemfile.lock文件。

只需打开您的Gemfile.lock文件,然后将版本更改为请求的更新即可。

在我的情况下,gem是rack,我在rack 2.0.7文件中定义了Gemfile.lock,但是我的应用程序需要rack 2.1.2,我只需要对其进行修改即可rack 2.1.2文件中的Gemfile.lock

然后我必须卸载机架的先前版本rack 2.0.7

 gem uninstall rack -v 2.0.7

最后在生产中安装了新宝石

bundle install --without development test

解决方案3

在极少数情况下,解决方案1 ​​解决方案2 可能不起作用,并且您需要在更新gem之前编辑Gemfile

在我的情况下,gem是puma,我在puma ~> 3.11中定义了Gemfile,但是我的应用程序需要puma ~> 4.3.1。此时运行bundle update puma并编辑我的Gemfile.lock文件是行不通的,因为Gemfile中指定的puma ~> 3.11版本不允许更新到puma ~> 4.3.1

我只需要将Gemfile中puma的版本更改为puma ~> 4.3.1,然后运行命令即可。

bundle update puma

仅此而已。

我希望这会有所帮助

答案 16 :(得分:0)

我的错误消息:

~ $ rake db:migrate                                                                                                                                                                            [2.6.5][10:21:00]
rake aborted!
Gem::LoadError: You have already activated rake 12.3.2, but your Gemfile requires rake 13.0.1. Prepending `bundle exec` to your command may solve this.
/Users/torvalds/workspace/ekohe/whitespace/config/boot.rb:5:in `<top (required)>'
/Users/torvalds/workspace/ekohe/whitespace/config/application.rb:3:in `require_relative'
/Users/torvalds/workspace/ekohe/whitespace/config/application.rb:3:in `<top (required)>'
/Users/torvalds/workspace/ekohe/whitespace/Rakefile:6:in `require_relative'
/Users/torvalds/workspace/ekohe/whitespace/Rakefile:6:in `<top (required)>'
(See full trace by running task with --trace)

我正在使用rbenv来管理我的Ruby环境。

众所周知,我的全局Ruby版本是default,而Ruby版本是2.7.1,因为我将其设置为rbenv global 2.7.1。但是,我在Ruby 2.7.1下的耙是12.3.2

~ $ rake --version

rake, version 12.3.2

我的项目Ruby版本为2.6.5。但是,在我的项目中,使用Ruby 2.6.5的耙子是13.0.1

~ $ bundle exec rake --version

rake, version 13.0.1

所以我必须卸载全局耙子

~ $ gem uninstall rake

然后重新安装

~ $ gem install rake

Fetching rake-13.0.1.gem
Successfully installed rake-13.0.1
1 gem installed

有效! ~~~

我不确定它是否会对其他项目产生影响。但是,到目前为止,它仍然有效。

答案 17 :(得分:0)

我已经通过简单地将 bundle exec 作为

"bundle exec rake db:create" or migrate