2013-03-25 78 views
2

我無法找到寶石/解決方案,我需要解決這個問題。所以基本上當請求進入時,我想分叉一個線程(或後臺進程)並立即開始運行(不會延遲)。但是,我嘗試使用dalayed_jobs,但它似乎想要一個隊列,並且不會立即啓動該命令。有沒有辦法做到這一點在鐵軌?Rails的後臺進程

更新

#user_controller.rb 
def show 
    @user = User.find(params[:id]) 
    @user.update_user #process to be forked 
    render json:@user 
end 

#user.rb 

def update_user 
    # code to update user 
end 
handle_asynchronously :update_user 

感謝,
DO

+0

如果你不提在延遲作業的時間就會立即運行。 – 2013-03-25 12:26:05

+0

@MuhamamdAwais他們被放入數據庫,但從未真正跑過。 – dostrander 2013-03-25 12:29:51

+0

請你檢查的delayed_job以下屬性,failed_at,last_error的最後一個條目,run_at – 2013-03-25 12:32:25

回答

1

延遲作業運行它(根據您的代碼),因爲你沒有指定什麼時候運行它觸發後立即處理。要運行它,您可以運行rake jobs:work,但您可能希望進程在後臺運行,以便在終端中啓動delayed_job守護進程。

script/delayed_job start 
0

從Ruby 1.9的你應該能夠通過調用Process.spawn 「你的命令」 要做到這一點,例如:

pid = Process.spawn("./some_shell_script.sh") 
puts "A shell script has just been launched with a Process ID of #{pid}" 

該命令應該產生一個獨立的進程並返回進程ID。

+0

如果可能的話,我想在導軌模型中使用它。否則,我將不得不用SQL做很多邏輯並重建我的模型 – dostrander 2013-03-25 13:52:04