Rails Railtie初始化器没有运行



我正在开发一个用于Rails 4应用程序的gem,其中包含一些作为主机应用程序初始化器运行的代码。我将一个类添加到一个模块与const_set,但该代码从来没有实际运行。此外,当我把gem放在我的应用程序的Gemfile中并启动rails控制台或服务器时,我期望从gem定义的类不会。如果我从控制台上执行普通的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

将我的gem放入我的应用程序的Gemfile并启动控制台后,MyGem模块被定义,但MyGem::MyClass没有定义。此外,据我所知,我的gem中的初始化器代码从未运行过(它会失败,因为没有定义类)。当I = require 'mygem'时,则定义了MyGem::MyClass。我看了很多rails插件和rails教程,他们都说只要把gem添加到你的Gemfile中,一切都应该正常工作。有人能指出我做错了什么吗?

我发帖后几乎立刻就明白了。我的gem名称是my-gem,但模块的文件名是my_gem.rb。在我的主机应用程序的Gemfile中,我有gem my-gem行,但要实际加载gem,我需要require 'my_gem'。所以,为了解决这个问题,我需要用gem my-gem, require: "my_gem"替换主机应用程序的Gemfile中的那行(或修复这个令人困惑和随意的命名方案:)。

相关内容

  • 没有找到相关文章

最新更新