我的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>...
为什么会这样?
答案 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'