在Rails 4中自動加載庫文件我使用初始化器中的以下行來實現/lib開發過程中的目錄:config/initializers/custom.rb:RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?(來自Rails 3快速提示:在開發模式下自動重新加載lib文件夾)它工作得很好,但是它的效率太低,無法在生產中使用-而不是在每個請求上加載庫,我只是想在啟動時加載它們。同一個博客另一篇文章描述如何做到這一點:config/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函數時也會得到NoMethodError。我的一個庫文件的示例:LIB/Extensions.rb:Time.class_eval do
def self.milli_stamp Time.now.strftime('%Y%m%d%H%M%S%L').to_i endend呼叫Time.milli_stamp將拋出NoMethodError我知道其他人也回答了類似的問題,但他們似乎都在處理命名約定和其他我以前不需要擔心的問題-我的lib類。工作過對于每次請求加載,我只想把它改為-啟動裝貨。什么是正確的方法來做這件事?
3 回答

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
我認為這可以解決你的問題:
在……里面config/application.rb:
config.autoload_paths?<<?Rails.root.join('lib')
并保留正確的命名約定利布.
在……里面LIB/foo.rb:
class?Fooend
在……里面LIB/Foo/bar.rb:
class?Foo::Barend
如果你真的想在文件里做一些猴子補丁,比如LIB/Extensions.rb,您可以手動要求:
在……里面配置/初始化器/request.rb:
require?"#{Rails.root}/lib/extensions"

慕村225694
TA貢獻1880條經驗 獲得超4個贊
autoload_paths
eager_load_paths
- 3 回答
- 0 關注
- 542 瀏覽
添加回答
舉報
0/150
提交
取消