簡體   English   中英

Rails-在sh腳本上運行delay_job

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM