Переключается ли RVM на другой экземпляр ruby ​​при ошибке?

У меня есть странная проблема: у меня есть задача Rake, которая, похоже, использует несколько версий Ruby. Когда один терпит неудачу, кажется, что он пробует другой.

Подробности

  • Макбук под управлением 10.6.5
  • рвм 1.1.0
  • Рубины: 1.8.7-p302, ree-1.8.7-2010.02, рубин-1.9.2-p0
  • Рейк 0.8.7
  • Драгоценный камень 1.3.7

  • Veewee (подготовка виртуальных машин с использованием Opcode.com, Vagrant и Chef)


Я не совсем уверен, что конкретные детали ошибки имеют значение, но поскольку это может быть проблема с самой Veewee. Итак, что я пытаюсь сделать, так это построить новую коробку на основе определения veewee. Команда завершается ошибкой об отсутствующем методе, но интересно то, как она завершается ошибкой.

Ошибки

Мне удалось выяснить, что если у меня только один Ruby установлен с RVM, он просто не работает. Если у меня более одной установки Ruby, происходит сбой в одном и том же месте, но выполнение продолжается в другом интерпретаторе.

Вот два разных обрезанных вывода консоли. Я обрезал их по размеру. Полный вывод каждой ошибки доступен в виде краткого описания.

Установлена ​​одна версия Ruby

Вот запуск команды, когда у меня есть только одна версия Ruby (1.8.7), доступная в RVM

boudica:veewee john$ rvm rake build['mettabox'] --trace

rvm 1.1.0 by Wayne E. Seguin ([email protected]) [http://rvm.beginrescueend.com/]

(in /Users/john/Work/veewee)
** Invoke build (first_time)
** Execute build

…

creating new harddrive
rake aborted!
undefined method `max_vdi_size' for #<VirtualBox::SystemProperties:0x102d6af80>
/Users/john/.rvm/gems/ruby-1.8.7-p302/gems/virtualbox-0.8.3/lib/virtualbox/abstract_model/dirty.rb:172:in `method_missing'

<------ stacktraces cut ---------->

/Users/john/.rvm/gems/ruby-1.8.7-p302/gems/rake-0.8.7/bin/rake:31
/Users/john/.rvm/gems/ruby-1.8.7-p302@global/bin/rake:19:in `load'
/Users/john/.rvm/gems/ruby-1.8.7-p302@global/bin/rake:19

Несколько версий Ruby

Вот та же команда, запущенная с тремя версиями Ruby, доступными в RVM. До этого я использовал «rvm use 1.8.7». Опять же, я не знаю, насколько важны детали конкретных ошибок — мне интересно, что есть три отдельных ошибки — каждая со своей собственной трассировкой стека — и каждая в другом Интерпретатор Ruby. Посмотрите на нижнюю часть каждой трассировки стека, и вы увидите, что все они получены из разных местоположений интерпретатора — сначала ree-1.8.7, затем ruby-1.8.7, затем ruby-1.9.2:

boudica:veewee john$ rvm rake build['mettabox'] --trace

rvm 1.1.0 by Wayne E. Seguin ([email protected]) [http://rvm.beginrescueend.com/]

(in /Users/john/Work/veewee)
** Invoke build (first_time)
** Execute build

…

creating new harddrive
rake aborted!
undefined method `max_vdi_size' for #<VirtualBox::SystemProperties:0x1059dd608>
/Users/john/.rvm/gems/ree-1.8.7-2010.02/gems/virtualbox-0.8.3/lib/virtualbox/abstract_model/dirty.rb:172:in `method_missing'

…

/Users/john/.rvm/gems/ree-1.8.7-2010.02/gems/rake-0.8.7/bin/rake:31
/Users/john/.rvm/gems/ree-1.8.7-2010.02@global/bin/rake:19:in `load'
/Users/john/.rvm/gems/ree-1.8.7-2010.02@global/bin/rake:19
(in /Users/john/Work/veewee)
** Invoke build (first_time)
** Execute build
isofile ubuntu-10.04.1-server-amd64.iso is available
["a1b857f92eecaf9f0a31ecfc39dee906", "30b5c6fdddbfe7b397fe506400be698d"]
[]
Last good state: -1
Current step: 0
last good state -1
destroying machine+disks
(re-)executing step 0-initial-a1b857f92eecaf9f0a31ecfc39dee906
VBoxManage: error: Machine settings file '/Users/john/VirtualBox VMs/mettabox/mettabox.vbox' already exists
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Machine, interface IMachine, callee nsISupports
Context: "CreateMachine(bstrSettingsFile.raw(), name.raw(), osTypeId.raw(), Guid(id).toUtf16().raw(), FALSE , machine.asOutParam())" at line 247 of file VBoxManageMisc.cpp
rake aborted!
undefined method `memory_size=' for nil:NilClass
/Users/john/Work/veewee/lib/veewee/session.rb:303:in `create_vm'
/Users/john/Work/veewee/lib/veewee/session.rb:166:in `build'
/Users/john/Work/veewee/lib/veewee/session.rb:560:in `transaction'
/Users/john/Work/veewee/lib/veewee/session.rb:163:in `build'
/Users/john/Work/veewee/Rakefile:87
/Users/john/.rvm/gems/ruby-1.8.7-p302/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/Users/john/.rvm/gems/ruby-1.8.7-p302/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/Users/john/.rvm/gems/ruby-1.8.7-p302/gems/rake-0.8.7/lib/rake.rb:631:in `each'
…

/Users/john/.rvm/gems/ruby-1.8.7-p302/gems/rake-0.8.7/bin/rake:31
/Users/john/.rvm/gems/ruby-1.8.7-p302@global/bin/rake:19:in `load'
/Users/john/.rvm/gems/ruby-1.8.7-p302@global/bin/rake:19
(in /Users/john/Work/veewee)
** Invoke build (first_time)
** Execute build
isofile ubuntu-10.04.1-server-amd64.iso is available
["a9c4ab3257e1da3479c984eae9905c2a", "30b5c6fdddbfe7b397fe506400be698d"]
[]
Last good state: -1
Current step: 0
last good state -1
(re-)executing step 0-initial-a9c4ab3257e1da3479c984eae9905c2a
VBoxManage: error: Machine settings file '/Users/john/VirtualBox VMs/mettabox/mettabox.vbox' already exists
VBoxManage: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Machine, interface IMachine, callee nsISupports
Context: "CreateMachine(bstrSettingsFile.raw(), name.raw(), osTypeId.raw(), Guid(id).toUtf16().raw(), FALSE , machine.asOutParam())" at line 247 of file VBoxManageMisc.cpp
rake aborted!
undefined method `memory_size=' for nil:NilClass
/Users/john/Work/veewee/lib/veewee/session.rb:303:in `create_vm'
/Users/john/Work/veewee/lib/veewee/session.rb:166:in `block in build'
/Users/john/Work/veewee/lib/veewee/session.rb:560:in `transaction'
/Users/john/Work/veewee/lib/veewee/session.rb:163:in `build'
/Users/john/Work/veewee/Rakefile:87:in `block in <top (required)>'
/Users/john/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rake.rb:634:in `call'
/Users/john/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rake.rb:634:in `block in execute'
…

/Users/john/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rake.rb:2013:in `top_level'
/Users/john/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rake.rb:1992:in `run'
/Users/john/.rvm/rubies/ruby-1.9.2-p0/bin/rake:35:in `<main>'

Только когда мы достигнем последней установленной версии Ruby, выполнение остановится.

Обсуждение

Кто-нибудь знает, что здесь происходит? Кто-нибудь видел это «отказоустойчивое» поведение раньше? Мне кажется странным, что первое исключение не останавливало выполнение, как это было с одним интерпретатором, но мне интересно, происходят ли при установке RVM вещи, которые мы, разработчики Ruby, не учитываем.


person JohnMetta    schedule 29.01.2011    source источник


Ответы (2)


Поскольку rvm rake ДОЛЖЕН запускать задачу rake для всех версий Ruby под контролем RVM, я думаю, что он делает то, что ожидается: rvm help показывает:

  rake       - runs a rake task against specified and/or all rubies

В частности, запрос помощи для rake показывает:

$ rvm help rake
Rake

  RVM allows you to run rake tasks across multiple ruby versions, for example:

    ∴ rvm 1.8.6,1.9.1 rake spec

JSON Summary

  Adding a --json flag prior to the word 'rake' and a JSON summary will be printed out at the end of the run.

YAML Summary

  Adding a --yaml flag prior to the word 'rake' and a YAML summary will be printed out at the end of the run.

Если вы пытаетесь запустить задачу rake, вам не нужно задействовать RVM. Сначала установите желаемую версию Ruby с помощью RVM, а затем запустите задачу:

rvm 1.9.2
rake some_task
person the Tin Man    schedule 29.01.2011
comment
Ах, все это из-за глупой ошибки! Я действительно использовал rvm use 1.8.7, но затем запустил задачу rvm rake, которая игнорировала предпочтительную версию ruby. Думаю, если бы я просто запускал задачу rake, я бы не запутался. Спасибо. - person JohnMetta; 02.02.2011

ошибка, о которой вы говорите, не является проблемой разных ruby ​​vms. Может быть, у вас есть обновление до Virtualbox 4.X, потому что это нужно новому бродяге?

Некоторые функции виртуального бокса, от которых зависит veewee, (еще не) перенесены в Virtualbox 4.x.

Сейчас я работаю над этим, напрямую выполняя команды виртуального бокса. Забавно, что при внедрении обновления я столкнулся с той же ошибкой.

Патрик (вдохновитель veewee)

person Patrick Debois    schedule 04.02.2011