ฉันใช้บรรทัดต่อไปนี้ใน initializer เพื่อสร้างรหัสอัตโนมัติใน/lib
ไดเรกทอรีของฉันในระหว่างการพัฒนา:
config / initializers / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(จากRails 3 Quicktip: โหลดโฟลเดอร์ lib ซ้ำอัตโนมัติในโหมดการพัฒนา )
มันใช้งานได้ดี แต่ไม่มีประสิทธิภาพเกินกว่าที่จะใช้ในการผลิต - แทนที่จะโหลด libs ในแต่ละคำขอฉันแค่ต้องการโหลดมันเมื่อเริ่มต้น บล็อกเดียวกันมีบทความอื่นที่อธิบายวิธีการนี้:
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/**/"]
อย่างไรก็ตามเมื่อฉันสลับไปที่แม้ในการพัฒนาฉันได้รับ NoMethodErrors เมื่อพยายามใช้ฟังก์ชั่น lib
ตัวอย่างหนึ่งในไฟล์ 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 ของฉันทำงานแล้วสำหรับการโหลดตามคำขอฉันแค่ต้องการเปลี่ยน เพื่อโหลดต่อการเริ่มต้น วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?