我在初始化程序中使用以下行来自动加载我的代码/lib
开发时的目录:
配置/初始化程序/custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(from Rails 3 快速提示:在开发模式下自动重新加载 lib 文件夹 https://web.archive.org/web/20160407135313/http://www.hemju.com/2011/02/rails-3-quicktip-auto-reload-lib-folders-in-development-mode/)
它工作得很好,但在生产中使用效率太低 - 我只想在启动时加载它们,而不是在每个请求上加载库。同一个博客有另一篇文章 https://web.archive.org/web/20130830141432/http://hemju.com:80/index.php/2010/09/rails-3-quicktip-autoload-lib-directory-including-all-subdirectories/描述如何执行此操作:
配置/应用程序.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
Calling Time.milli_stamp
会抛出NoMethodError
我意识到其他人已经回答了类似的问题,但他们似乎都处理命名约定和其他我之前不必担心的问题 - 我的 lib 类已经worked对于每个请求加载,我只想将其更改为每个-startup加载中。这样做的正确方法是什么?