Saya menggunakan baris berikut dalam initializer untuk memuat kode secara otomatis di /libdirektori 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_stampakan 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?