我有一个“状态”页面。我正在显示本地机器的状态,例如当前的上传/下载速度,是否正在录制。如何在rails中获取delayed_job的输出
为了获得上述信息我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
这里是我的longer_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
延迟工作的重点在于他们在后台运行,而且他们不知道何时运行。他们可以安排在今天和明天运行。从他们那里获取任何数据是没有意义的,因为用户需要等待随机的时间来获取这些数据。 – BroiSatse 2014-09-24 09:02:33
@BroiSatse,所以这个'delayed_job'不是一个好的解决方案。 – user2622247 2014-09-24 09:30:34
有没有其他方法可以做到这一点? – user2622247 2014-09-24 09:37:15