添加到加载路径后,lib目录中的类仍无法识别

时间:2014-09-11 05:10:45

标签: ruby-on-rails

我的libs目录中有一个目录结构:

  docx
    parser.rb

其中一些内容:

module Docx
  class Parser
  end
end

我想将它添加到加载路径,以便在我运行rails console时加载它:

config.autoload_paths << Rails.root.join('lib')

不幸的是,即使在我运行rails console之后,我也会收到此错误:

> Docx
NameError: uninitialized constant Docx

尽管libs处于加载路径中:

2.1.2 :005 > ActiveSupport::Dependencies.autoload_paths
 => [#<Pathname:/Users/myuser/projects/docx_rails/lib>...

为什么会这样?

2 个答案:

答案 0 :(得分:0)

您是否遵循了正确的命名约定?

在config / application.rb中:

config.autoload_paths << Rails.root.join('lib')

然后在lib中保留正确的命名约定。

在lib / moo.rb中:

class Moo
end

在lib / moo / car.rb中:

class Moo::Car
end

答案 1 :(得分:-1)

Rails中的延迟加载与许多其他功能一样 - 只有尊重“标准overy customization”理念。

在这种情况下,要加载Docx模块,您需要重命名该文件,以便将其命名为docx.rb。

虽然,在我看来,你正在尝试使用rails控制台构建一个gem。

我建议使用irb控制台(rails会加载你库中需要明确要求的许多库 - 如果你使用rails控制台,你将永远不会注意到这一点。)

无论何时进行代码更改,都可以使用load方法重新加载代码(与require不同,加载强制代码再次加载)。

load 'docx.rb'