2016-08-01 126 views
1

我創建了一個運行後臺進程的rails應用程序。它定期ping服務器並顯示響應時間圖。爲此,我使用了一個名爲crono的gem。我使用'bundle exec crono'從命令行開始執行任務。Ruby on rails:如何在服務器啓動時自動運行後臺任務?

如何在rails服務器啓動時自動運行後臺進程,而無需從命令行啓動它?

此外,有沒有辦法自動刷新頁面,以便它顯示更新的圖表?

編輯:此應用程序將部署到生產。
編輯:我仍然無法得到這個工作。這裏的文件夾結構:


的application/config/
ping_job.rb
cronotab.rb

cronotab使用 'CRONO' 寶石執行內部ping_job.rb每5任務秒。

需要 '百頭巨怪'
類PingJob
    DEF [執行

     #任務定義放在這裏。

   年底

我希望服務器啓動時運行在ping_job.rb自動定義的任務。我正在考慮每當寶石時使用。任何和所有的建議是受歡迎的。

+0

要在系統啓動時啓動系統,請使用系統的標準工具。例如,在Ubuntu上它曾經是新貴。現在,我認爲它是系統化的。其他系統可以有其他工具。請查閱您擁有的工具的文檔。 –

回答

2

放入到config/environment.rb右下Rails.application.initialize!這是跑到啓動Rails服務器,這樣就前一段時間在應用程序初始化

1

後運行我想加入背景的開始與您的導軌服務器一起啓動。最後我發現這是一個糟糕的主意。我認爲最好的解決方案是創建一個部署任務,在每個部署中啓動並重新啓動該過程。例如capistrano允許做這樣的事情:

namespace :deploy do 
    task :start do 
    invoke 'my_process:start' 
    end 

    task :stop do 
    invoke 'my_process:stop' 
    end 

    task :restart do 
    invoke 'my_process:start' 
    invoke 'my_process:stop' 
    end 
end 

namespace :my_process 
    task :start do 
    execute "some system command to start the process" 
    end 

    task :stop do 
    execute "some system command to stop the process" 
    end 
end 

永遠不要在Rails初始化文件中啓動你的進程。當服務器上的應用程序工作人員很少時,它可能會多次啓動該過程。或者它可能會在啓動Rails控制檯等時啓動該進程。

相關問題