4

我正在开发 Rails (3.2) 应用程序,我需要在应用程序启动时执行一些任务。

因为我想将逻辑保存在一个单独的文件中,所以我还创建了看起来像的 lib/helinium.rb(使用虚拟运行方法)

class Helinium
  def self.run
    puts "running ...."
  end
end

我创建了一个简单的初始化文件 config/initializers/perform_checks.rb

Helinium.run

一切似乎都很好。现在我希望将 Helinium 类放在一个模块中,这样两个文件分别看起来像

module Elemens
  class Helinium
      def self.run
        puts "running ...."
      end
  end
end

Elemens::Helinium.run

但是当我尝试启动应用程序时,我得到了

未初始化的常量元素 (NameError)

我在这里错过了什么吗?为什么找不到模块?

感谢,并有一个愉快的一天。

4

1 回答 1

7

解释

这与自动加载在 Rails 中的工作方式有关。

Rails 不会自动要求 /lib 下的所有内容。只有当您尝试使用与 lib 中的文件名匹配的新类名时,它才会自动加载。

您可以查看此帖子以获取更多信息:
https ://stackoverflow.com/a/9819938/1188913

使固定

要解决您的问题,您可以

require 'lib/helinium'

或者

将类放入一个名为的文件夹中lib\elemens

于 2013-03-15T07:28:58.200 回答