簡體   English   中英

如何在Rails中獲取delay_job的輸出

[英]How can I get the output of delayed_job in rails

我有一個“狀態”頁面。 我正在顯示本地計算機的狀態(例如當前的上載/下載速度)的錄像是否在進行。

為了獲得上述信息,我將SSH放入該計算機。 這是我的示例代碼

Net::SSH.start('localhost','ubuntu', :password => 'ubuntu') do |session|
    upload_speed = session.exec!("speedtest | grep Upload:").chomp.strip
    return upload_speed
end

但是獲取這些狀態需要花費時間(大約3-4分鍾)。 它返回我“連接超時錯誤”。 因此,我嘗試在后台添加此過程。 為此,我正在使用delayed_job gem

這是我的代碼我的控制器方法

def unit_additional_status
    @machine = MachineInfo.find(params[:unit_id])    
    stat = Delayed::Job.enqueue(LongerTask.new(@machine), 3, :run_at => 1.seconds.from_now)
end

這是我的long_task.rb文件

    require 'rubygems'
    require 'net/ssh'

    class LongerTask < Struct.new(:machine)
      def perform
             port = @machine.port
             @status = Hash.new
             Net::SSH.start('localhost','ubuntu', :password => 'ubuntu', :port => port) do |session|
              upload_speed = session.exec!("speedtest | grep Upload:").chomp.strip
              status["upload_speed"].push(upload_speed) 
            end
            @status
      end
end

執行后,我必須將此@status傳遞給控制器​​操作,以便將其傳遞給status.html.erb視圖。

所以我有一個問題,如何將其傳遞給控制器​​方法,或者如何獲取延遲作業執行的輸出。

另外,如果有人有更好的解決方案,請告訴我。

我正在使用rails 3.2.14ruby 1.8.7

您需要創建某種其他狀態模型,例如Job (status:string, message:string) 然后,在計划了該模型的實例后,將其傳遞給延遲的任務。 當任務開始執行時,將狀態設置為“正在運行”。 完成后,您將使用所需的結果信息更新消息字段,並將狀態設置為“完成”。 這有很多好處,例如您可以很好地了解作業隊列,並且可以擴展以反映執行時間,錯誤等。

要在示例中顯示機器狀態,您只需選擇狀態為“已完成”的最新作業,並顯示其時間戳和消息即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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