Rails 6 с Zeitwerk: как расширить классы Ruby Core, такие как Date, Time, String и т. Д. - PullRequest
0 голосов
/ 23 сентября 2019

Я обновляю Rails 5.2.2 до Rails 6.0.0, который теперь имеет Zeitwerk * ​​1002 *.

Ранее у меня были расширенные базовые классы ruby, такие как Date, Time, String, Float и т. Д., Как описано в в этом вопросе .Использование файла инициализаторов для загрузки всех файлов из папки lib/core_ext/*.При запуске rails server он теперь выдает ошибку и читает последнюю строку стека:

/home/username/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/zeitwerk-2.1.10/lib/zeitwerk/loader.rb:351:in `const_get': uninitialized constant CoreExt::Date (NameError)

К сожалению, Zeitwerk вызывает ошибку, когда lib/core_ext/date.rb и т. Д. Выдает ошибку, которая уже была определена (при использовании Rails.autoloaders.log! в application.rb. CoreExt::Date

С тех пор я переместил файлы непосредственно в initializers (ранее у меня был только каталог инициализаторов с файлом, который загружал каждый файл из 'lib/core_ext/*Папка). Это решило проблему на данный момент, но я хотел бы сохранить папку core_ext и файлы там, где они были.

Что я здесь пропустил?

lib/core_ext/date.rb

class Date
  def to_sap
    strftime('%d.%m.%Y')
  end
end

Я пытался явно обернуть в CoreExt, но это не помогло.

module CoreExt
  class Date
    def to_sap
      strftime('%d.%m.%Y')
    end
  end
end
...