2016-07-07 4 views
0

rvm current говорит, что я переключился на какой-то конкретный гемсет, gem list перечисляет только один rake драгоценный камень, так почему мне нужно добавить bundle exec?Почему при использовании gemset требуется `bundle exec`?

$ rvm current 
[email protected] 

$ 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/[email protected]/gems/bundler-1.12.5/lib/bundler/runtime.rb:35:in `block in setup' 
/home/rm/.rvm/gems/[email protected]/gems/bundler-1.12.5/lib/bundler/runtime.rb:20:in `map' 
/home/rm/.rvm/gems/[email protected]/gems/bundler-1.12.5/lib/bundler/runtime.rb:20:in `setup' 
/home/rm/.rvm/gems/[email protected]/gems/bundler-1.12.5/lib/bundler.rb:95:in `setup' 
/home/rm/.rvm/gems/[email protected]/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 Позвольте мне сделать себя более ясным. rm gemset активен, я вижу только один номер rake (10.4.2). Но rake-11.1.2 был установлен с bundler. И когда я запускаю bundle exec rake, вызывается rake-11.1.2. Так почему бы мне не увидеть его в списке драгоценных камней, о котором сообщает gem? Разве гемзеты не должны изолировать множества драгоценных камней друг от друга.

О, и забыл упомянуть, что это производственная машина.

ответ

0

На машинах разработки bundler устанавливает драгоценные камни, где gem делает. И вы можете видеть их в выводе gem list. Однако на производственных серверах они обычно устанавливаются в отдельный каталог. Это то, что делает --deployment вариант. Или вы можете изменить местоположение драгоценного камня с помощью опции --path.

1

Как вы можете видеть в своей ошибке, ваш рейк-вызов должен использовать rake 11.1.2, но ваши локальные компьютеры по умолчанию - rake 10.4.2, поэтому, не добавляя вызов с помощью bundle exec, используется значение по умолчанию (10.4.2). Какой пакет exec does всегда использует версию gem, указанную в gemfile проектов, поэтому всегда лучше использовать bundle exec

0

Возможно, вы не правильно устанавливаете gemset. Если у одного gemset есть несколько версий одного и того же драгоценного камня, вы должны использовать execle. Попробуйте создать и использовать конкретный gemset для вашего проекта, если вы не сделали его явным. Rvm использует по умолчанию тот, который будет переполнен драгоценными камнями.

Смежные вопросы