0

rvm current说我已经切换到一些特定的 gemset,gem list只列出了一个rakegem,那么为什么我需要预先添加bundle exec

$ rvm current
ruby-2.3.0@rm

$ gem list rake

*** LOCAL GEMS ***

rake (10.4.2)

$ rake
rake aborted!
Gem::LoadError: You have already activated rake 10.4.2, but your Gemfile requires rake 11.1.2. Prepending `bundle exec` to your command may solve this.
/home/rm/.rvm/gems/ruby-2.3.0@rm/gems/bundler-1.12.5/lib/bundler/runtime.rb:35:in `block in setup'
/home/rm/.rvm/gems/ruby-2.3.0@rm/gems/bundler-1.12.5/lib/bundler/runtime.rb:20:in `map'
/home/rm/.rvm/gems/ruby-2.3.0@rm/gems/bundler-1.12.5/lib/bundler/runtime.rb:20:in `setup'
/home/rm/.rvm/gems/ruby-2.3.0@rm/gems/bundler-1.12.5/lib/bundler.rb:95:in `setup'
/home/rm/.rvm/gems/ruby-2.3.0@rm/gems/bundler-1.12.5/lib/bundler/setup.rb:9:in `<top (required)>'
/home/rm/app/releases/20160707125838/config/boot.rb:3:in `<top (required)>'
/home/rm/app/releases/20160707125838/config/application.rb:1:in `<top (required)>'
/home/rm/app/releases/20160707125838/Rakefile:4:in `<top (required)>'
LoadError: cannot load such file -- bundler/setup
/home/rm/app/releases/20160707125838/config/boot.rb:3:in `<top (required)>'
/home/rm/app/releases/20160707125838/config/application.rb:1:in `<top (required)>'
/home/rm/app/releases/20160707125838/Rakefile:4:in `<top (required)>'
(See full trace by running task with --trace)

UPD让我让自己更清楚。rmgemset 处于活动状态,我rake在那里只看到一颗宝石 ( 10.4.2)。但是rake-11.1.2安装了bundler. 当我运行bundle exec rake,rake-11.1.2被调用。那么为什么我没有在报告的宝石列表中看到它gem?宝石组不应该将一组宝石彼此隔离开来。

哦,忘了说这是一台生产机器。

4

3 回答 3

1

正如您在错误中看到的那样,您的 rake 调用需要使用 rake 11.1.2,但您的本地计算机默认为 rake 10.4.2,因此通过不使用 bundle exec 在调用前添加默认值 (10.4.2)。bundle exec 所做的是始终使用项目 gemfile 中指定的 gem 版本,因此使用 bundle exec 始终是最佳实践

于 2016-07-07T16:04:08.190 回答
0

也许您没有正确设置 gemset。如果一个 gemset 有同一个 gem 的多个版本,你应该使用 bundle exec。尝试为您的项目创建和使用特定的 gemset,如果您没有明确表示 rvm 使用默认的 gem,这将过度拥挤的 gem

于 2016-07-07T16:09:47.340 回答
0

在开发机器上bundler安装 gems 在哪里gemgem list您可以在的输出中看到它们。但是,在生产服务器上,它们通常安装到单独的目录中。这就是--deployment选项的作用。--path或者您可以使用选项更改 gem 的位置。

于 2016-07-10T11:25:55.003 回答