[英]Rails - running delayed_job on sh script
我有在獨角獸上運行的Rails 4.2。
我需要從應用程序中調用sh腳本,但是我需要控制器來調用SH腳本,而不要等待SH腳本運行。
我目前用system(@jobCall)
調用sh腳本
為此,我安裝了delay_job gem。 如何在不等待作業完成的情況下運行system(@jobCall)
?
完整的創建方法代碼如下:
def create
@job = Job.new(job_params)
respond_to do |format|
if @job.save
@jobCall = 'sh /home/some.user/kitchen.sh'
system(@jobCall) ##need to call this and not wait for job to finish
format.html { redirect_to @job, notice: 'Job ran'}
format.json { render :show, status: :created, location: @job }
else
format.html { render :new }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
end
我認為您需要使用線程在后台運行作業。 雖然,您可能需要另一種獲取作業結果的方法,但是如果不需要等待完成,則不要渲染或重定向。
我不熟悉Ruby / Rails,但是僅調用system()並不能滿足您的要求,因為system()不使用delay_job gem。 看一下delay_job的文檔 。
基本概念是這樣的:
排隊工作
在任何對象上調用.delay.method(params),它將在后台處理。
# without delayed_job @user.activate!(@device) # with delayed_job @user.delay.activate!(@device)
編輯:不確定這是否有效(因為我缺乏使用Ruby on Rails的經驗),但是應該是這樣的:
class Foo
def sh_script
system('sh /home/some.user/kitchen.sh')
end
handle_asynchronously :sh_script, :priority => 20
end
接着
@f = new Foo.new()
@f.delay.sh_script()
...應該可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.