2011-12-17 36 views
21

tôi đã cố gắng:Làm thế nào để chạy mã ruby ​​của tôi sau khi máy chủ Rails bắt đầu?

after_initialize do 
    #code 
end 

Nhưng: (tài liệu)

Một số phần của ứng dụng của bạn, đặc biệt là các nhà quan sát và định tuyến, không chưa thiết lập tại điểm mà khối after_initialize được gọi.

Tôi cần định tuyến và logger trong mã của tôi

Bất kỳ ý tưởng?

+1

bạn có thể nêu rõ vấn đề của mình một cách rõ ràng hơn không. –

+0

Tôi muốn sự kiện on_server_start. – user1103291

+3

Tại sao bạn muốn điều đó? Bạn muốn làm gì? Giải thích vấn đề của bạn và có thể có giải pháp tốt hơn so với sự kiện "on_server_start". –

Trả lời

25

Xem phần 3.1 từ http://guides.rubyonrails.org/configuring.html

Tôi tin rằng bạn sẽ đặt mã này trong config/application.rb

config.after_initialize do 
    # .... 
end 

# config.after_initialize takes a block which will be run after Rails has finished initializing the application. 
# That includes the initialization of the framework itself 

Cũng http://guides.rubyonrails.org/initialization.html

+5

Điều này cũng chạy khi bảng điều khiển Rails ('rails c') được gọi. – Vortico

+9

... và trên các công việc cào, phụ thuộc vào đường ray. Có cơ chế đáng tin cậy nào để được thông báo ** chỉ ** khi máy chủ khởi động không ?! – mugwump

2

Một lựa chọn khác là tạo ra một khởi tạo tùy chỉnh. Nó chỉ là một tệp ruby ​​sống dưới cấu hình/initializers/và được thực hiện chính xác "on_server_start" event :)

2

@house9's answer là chính xác, như được chỉ ra bởi các ý kiến, điều này cũng sẽ thực hiện khi chạy các tác vụ cào, điều khiển, v.v. Tôi đã sử dụng thông tin sau đây để nhận ra khi máy chủ thực sự được thực hiện:

# application.rb 
if defined?(Rails::Server) 
    config.after_initialize do 
    # Do stuff here 
    end 
end 
Các vấn đề liên quan