RVM "отказоустойчив" к другому экземпляру ruby ​​при ошибке? - PullRequest
0 голосов
/ 29 января 2011

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

Подробнее

  • MacBook под управлением 10.6.5
  • rvm 1.1.0
  • Рубины:1.8.7-p302, ree-1.8.7-2010.02, ruby-1.9.2-p0
  • Грабли 0.8.7
  • Камень 1.3.7

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


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

Ошибки

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

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

Одна установленная версия Ruby

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

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

rvm 1.1.0 by Wayne E. Seguin (wayneeseguin@gmail.com) [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 (wayneeseguin@gmail.com) [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, не рассматриваем.

Ответы [ 2 ]

1 голос
/ 30 января 2011

Поскольку 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.

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

rvm 1.9.2
rake some_task
0 голосов
/ 04 февраля 2011

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

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

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

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

...