[英]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.14
和ruby 1.8.7
您需要创建某种其他状态模型,例如Job (status:string, message:string)
。 然后,在计划了该模型的实例后,将其传递给延迟的任务。 当任务开始执行时,将状态设置为“正在运行”。 完成后,您将使用所需的结果信息更新消息字段,并将状态设置为“完成”。 这有很多好处,例如您可以很好地了解作业队列,并且可以扩展以反映执行时间,错误等。
要在示例中显示机器状态,您只需选择状态为“已完成”的最新作业,并显示其时间戳和消息即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.