首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails Railtie初始化程序不运行

Rails Railtie初始化程序不运行
EN

Stack Overflow用户
提问于 2014-08-19 05:06:16
回答 1查看 1.1K关注 0票数 0

我正在开发一个在Rails4应用程序中使用的gem,其中包含一些要作为主机应用程序的初始化器运行的代码。我正在使用const_set将一个类添加到一个模块中,但该代码并未实际运行。此外,当我将gem放入应用程序的Gemfile中并启动rails控制台或服务器时,我期望从gem中定义的类并不是这样的。如果我从控制台执行一个普通的require 'my_gem',那么我期望定义的那些类最终都会被定义,如果我手动运行初始化代码,就不会抛出错误。我知道我一定遗漏了一些非常微不足道的东西,但我不知道那是什么。

这是mygem/lib/mygem.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
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中,一切都会正常工作。有人能发现我做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-19 05:16:46

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25372024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档