2010-07-26 15 views
5

Tôi đã làm việc để ứng dụng Rails 2.3.8 của chúng tôi chạy đúng theo JRuby. Mọi thứ hoạt động tốt cho đến khi tôi bật config.threadsafe! để đạt được sự đồng thời mà JRuby cung cấp. Điều này đã gây ra các mô-đun và lớp học trong lib/ không còn tự động tải.Cách chính xác để tải các mô-đun/lớp học từ lib/khi sử dụng config.threadsafe là gì! Tùy chọn?

với config.threadsafe! đã bật:

$ ruby script/runner -e production 'p Sim::Sim200Provisioner' 

/Users/amchale/.rvm/gems/[email protected]/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in `const_missing': uninitialized constant Sim::Sim200Provisioner (NameError) 
    from (eval):1 

with config.threadsafe! khuyết tật:

$ ruby script/runner -e production 'p Sim::Sim200Provisioner' 
Sim::Sim200Provisioner 

Các tập tin trong câu hỏi là lib/sim/sim200_provisioner.rb nơi Simapp/models/sim.rb. Rails thường không gặp khó khăn khi tìm và tải tệp.

Tôi có cần yêu cầu tất cả libs của mình theo cách thủ công hay không, hoặc có cách nào giống Rails để xử lý nó mà tôi bị thiếu không?

Trả lời

7

documentation của threadsafe! đề cập rằng nó vô hiệu hóa tải phụ thuộc tự động. Lý do là có thể có điều kiện chủng tộc trong quá trình tải các tập tin nếu hai hoặc nhiều chủ đề cả hai quyết định họ vẫn còn thiếu một lớp nhất định.

Thay vào đó, bạn nên thủ công require tất cả các tệp bạn cần trong một initializer.

0

Liên kết tài liệu không chứa thông tin, do đó, đây là một số tài liệu liên quan cho #threadsafe! :

Bật chế độ chuỗi. Cho phép yêu cầu đồng thời với bộ điều khiển hành động và nhiều cơ sở dữ liệu kết nối. Đồng thời tắt tính năng tải phụ thuộc tự động sau khi khởi động và vô hiệu hóa việc tải lại mã theo mọi yêu cầu , vì đây cơ bản là không tương thích với an toàn luồng.

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