2010-08-21 29 views
6

Theo http://edgeapi.rubyonrails.org/classes/Rails/Railtie.html, nếu tôi viết một plugin Rails 3 và tôi muốn để móc vào quá trình khởi tạo, tôi viếtThêm bước khởi để Rails 3 quá trình khởi động chỉ trong chế độ máy chủ

class MyRailtie < Rails::Railtie 
    initializer "my_railtie.configure_rails_initialization" do 
    # some initialization behavior 
    end 
end 

Tuy nhiên, khởi tạo này xuất hiện được thực hiện khi bạn chạy, ví dụ: tác vụ Rails rake, không chỉ khi bạn chạy rails s hoặc tương tự. Câu hỏi của tôi là, làm thế nào để ngăn chặn mã của tôi trong khối này đang được chạy trong các nhiệm vụ Rails, như trái ngược với máy chủ khởi động đầy đủ Rails? Điều này có vẻ là một vấn đề phổ biến với Rails 3 plugins.

Trả lời

0

Cách quay lại khi tôi đăng câu hỏi này, Mongoid đã gặp sự cố này. Tôi đã báo cáo nó here và nó đã được giải quyết bằng cách gói mã trong một khối config.after_initialize. Nếu Rails không được khởi tạo, thì khối này sẽ không bao giờ được gọi. Thêm thông tin here.

+0

Điều này không làm việc cho tôi, bất kỳ mã nào tôi đặt trong config.after_initialize được gọi ngay cả trong chế độ điều khiển hoặc chế độ cào – Alex

+0

Hmm, bạn có sử dụng cùng một kiểu như trong [railoid.rb] của Môngoid không (https: // github. com/mongoid/mongoid/blob/master/lib/mongoid/railtie.rb)? Với 'config.after_initialize' được lồng vào bên trong của một khối' initializer'? –

+0

Tôi đặt khối config.after_initialize vào application.rb của mình, nhưng đoạn mã dường như chạy mọi lúc không có vấn đề gì nếu nó được khởi chạy bằng đường ray c hoặc đường ray s, hoặc thậm chí một cái cào đơn giản – Alex

4

thêm khối này để khởi tạo của bạn:

if defined?(Rails::Server) 
    # do something 
end 

này nên làm việc với dòng điện 3.0.6 ray phiên bản.

+0

Hmm, bạn có thể nói thêm về các trường hợp trong đó 'Rails :: Server' được xác định không? Tôi chưa thấy bất kỳ plugin nào sử dụng plugin này. –

+0

Điều này là tuyệt vời, nhưng nó không có vẻ làm việc với Heroku? Bất kỳ lựa chọn thay thế? – Alex

+0

Tôi cần một cái gì đó để sử dụng trên môi trường dev của chúng tôi để khởi động một số dịch vụ nhưng chỉ khi chạy ở chế độ máy chủ, đi qua mã nguồn đường ray, đối tượng đó được tải khi bạn khởi động máy chủ đường ray. – dudemeister

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