Saya menggunakan baris berikut dalam initializer untuk memuat kode secara otomatis di /lib
direktori saya selama pengembangan:
config / initializers / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(dari Rails 3 Quicktip: Auto reload folder lib dalam mode pengembangan )
Ini berfungsi dengan baik, tetapi terlalu tidak efisien untuk digunakan dalam produksi - Alih-alih memuat lib pada setiap permintaan, saya hanya ingin memuatnya saat start up. Blog yang sama memiliki artikel lain yang menjelaskan cara melakukan ini:
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/**/"]
Namun, ketika saya beralih ke itu, bahkan dalam pengembangan, saya mendapatkan NoMethodErrors ketika mencoba menggunakan fungsi lib.
Contoh salah satu file lib saya:
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
Memanggil Time.milli_stamp
akan melempar NoMethodError
Saya menyadari orang lain telah menjawab pertanyaan serupa pada SO tetapi mereka semua tampaknya berurusan dengan konvensi penamaan dan masalah lain yang saya tidak perlu khawatirkan sebelumnya - kelas lib saya sudah berfungsi untuk pemuatan per permintaan, saya hanya ingin mengubahnya untuk memuat per startup . Apa cara yang benar untuk melakukan ini?