Миграция к рубину
Я пытаюсь перенести свой проект из mri
в rubinius
получить преимущество параллелизма.
Я запустил сервер и открыл первую страницу, а затем получил ошибку:
Puma caught this error: undefined method `=~' for Pathname (NameError)
kernel/common/module.rb:212:in `instance_method'
kernel/common/module.rb:354:in `undef_method'
kernel/bootstrap/array.rb:66:in `each'
kernel/common/module.rb:352:in `undef_method'
...
Мой гемфайл
source 'https://rubygems.org'
ruby '2.1.0', :engine => "rbx", engine_version: '2.2.1'
gem "rubysl" # Ruby Standard Library meta-gem for rubinius
# Server requirements
gem 'puma'
...
В чем может быть проблема здесь?
ОБНОВЛЕНИЕ: полная трассировка стека
1 ответ
Я проверил вашу трассировку стека и посмотрел на исходный код Rubinius. Оскорбительная строка:
class Pathname
undef =~ # THIS IS IT
end
#=~
это метод экземпляра на Object
так нормально undef =~
должен работать на любом классе... если это не было undef
на Object
или на Pathname
уже.
Мне интересно, если это происходит, потому что у вас есть rubysl
драгоценный камень в вашем Gemfile. Я не знаю Рубиния, но из того, что я вижу, кажется, что вам не нужно специально включать этот драгоценный камень. Или, может быть, это было в прошлых версиях, но не сейчас. Если стандартная библиотека загружается дважды, это объясняет, почему undef =~
терпит неудачу во второй раз.
Если это не поможет, я рекомендую вам временно удалить как можно больше драгоценных камней и посмотреть, исчезнет ли проблема. Если так, добавьте их один за другим, пока не найдете, какой из них вызывает проблему.