Rails не запускается инициализатор Railtie

Я разрабатываю гем для использования в приложении на Rails 4, который включает в себя немного кода для запуска в качестве инициализатора для хост-приложения. Я добавляю класс в модуль с const_set, но этот код на самом деле никогда не запускается. Кроме того, когда я помещаю драгоценный камень в Gemfile моего приложения и запускаю консоль rails или сервер, классы, которые я ожидаю определить из этого драгоценного камня, не являются таковыми. Если я сделаю простой require 'my_gem' из консоли окончательно определяются те классы, которые я ожидаю определить, и если я запускаю код инициализации вручную, никаких ошибок не возникает. Я знаю, что, должно быть, мне не хватает чего-то действительно тривиального, но я не могу понять, что это такое.

Вот mygem/lib/mygem.rb:

require "mygem/railtie" if defined?(Rails)
require "mygem/version"

module MyGem
  class MyClass

    def self.my_method(argument1, argument2, argument3)
      argument1 == argument2 + argument3
    end
  end
end

Вот mygem/lib/mygem/railtie.rb:

module MyGem
  class Railtie < Rails::Railtie

    initializer "mygem.define_subclass" do
      PreviouslyDefinedAppModule.const_set "MyClass", MyGem::MyClass
    end
  end
end

После помещения моего драгоценного камня в Gemfile моего приложения и запуска консоли, MyGem модуль определен, но MyGem::MyClass не определено, однако. Кроме того, насколько я могу судить, ни один код инициализатора из моего гема никогда не запускался (он потерпит неудачу, так как класс не был определен). Когда я require 'mygem', затем MyGem::MyClass затем определяется. Я посмотрел на несколько плагинов rails и обучающих программ по raltie, и все они говорят, что нужно просто добавить драгоценный камень в ваш Gemfile, и все должно работать. Кто-нибудь может определить, что я делаю не так?

1 ответ

Я понял это почти сразу после публикации. Моё сокровище зовут my-gem, но имя файла модуля my_gem.rb, В Gemfile моего хост-приложения есть строка gem my-gem, но на самом деле загрузить драгоценный камень мне нужно require 'my_gem', Итак, чтобы исправить это, мне нужно заменить эту строку в Gemfile хост-приложения на gem my-gem, require: "my_gem" (или исправьте эту запутанную и случайную схему именования:).

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