Миграция к рубину

Я пытаюсь перенести свой проект из 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 =~ терпит неудачу во второй раз.

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

Другие вопросы по тегам