2010-05-20 20 views
5

Tôi có một lớp học nằm bên trong thư mục RAILS_ROOT/lib, mà tôi sử dụng trong một trong những người giúp đỡ của tôi, và nó hoạt động rất tốt trong phát triển.Đường ray - tại sao một mô hình bên trong RAILS_ROOT/lib không khả dụng ở chế độ sản xuất?

Khi tôi chuyển sang sản xuất, ứng dụng ném một NameError (uninitialized constant SomeHelper::SomeClass), và tôi phải tải nó bằng tay trong các helper:

load "#{Rails.root}/lib/some_class.rb" 

module SomeHelper 
    def some_method 
    sc = SomeClass.new 
    # blah 
    end 
end 

Tôi đã theo ấn tượng rằng tất cả mọi thứ bên trong RAILS_ROOT/lib/* nên có sẵn tất cả vào ứng dụng - có bất kỳ điều gì tôi cần phải định cấu hình để thực hiện điều này trong chế độ prod không? cảm ơn.

Trả lời

1

Khi bạn gọi SomeHelper :: SomeClass, cơ chế tự động load Rails' sẽ cố gắng để tải tập tin tại lib/some_helper/some_class.rb

Rails sẽ không tải mọi thứ trong lib/*, nó sẽ chỉ cố gắng để tải tệp khi ConstMissing xảy ra.

1

Bạn có thể cần phải kiểm tra sự khác biệt giữa cài đặt cấu hình giữa môi trường sản xuất và phát triển: config/environments/production.rbconfig/environments/development.rb.

Trong quy trình khởi tạo Rails, load_plugins() được gọi là tải tất cả các plugin trong config.plugin_paths. Bạn cần phải chắc chắn rằng thư mục của bạn lib/ được bao gồm, như trong

config.plugin_paths = [ "# {} RAILS_ROOT/lib/plugins", "# {} RAILS_ROOT/vendor/plugins"]

Ngoài config.plugin_paths, bạn cũng có thể đặt tên các plugin sẽ được tải trong config.plugins. Nếu biến đó chứa :all thì tất cả các plugin (tìm thấy) sẽ được tải.

(By the way: Cấu hình các thiết lập bằng một trong hai môi trường nên đi trong config/environment.rb Mọi bất đồng giữa các môi trường là do thiết lập trong .rb file tương ứng..)

Các vấn đề liên quan