在开发过程中,我在初始化器中使用以下行来自动加载/lib目录中的代码:
配置/初始化/ custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(来自Rails 3快速提示:在开发模式下自动重载库文件夹)
它工作得很好,但在生产中使用效率太低——我不想在每个请求上加载程序库,而只想在启动时加载它们。同一博客还有另一篇文章描述了如何做到这一点:
配置/ application.rb:
# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
然而,当我切换到它时,即使在开发中,当我尝试使用lib函数时,我得到NoMethodErrors。
我的lib文件的一个例子:
lib / extensions.rb:
Time.class_eval do
def self.milli_stamp
Time.now.strftime('%Y%m%d%H%M%S%L').to_i
end
end
调用Time.milli_stamp将抛出NoMethodError
我意识到其他人已经回答了关于SO的类似问题,但他们似乎都处理了命名约定和其他问题,我以前不必担心-我的lib类已经为每个请求加载工作,我只是想把它改为每次启动加载。正确的做法是什么?