在Rails中设置系统调用的超时

时间:2013-05-05 15:36:54

标签: ruby-on-rails-3 wget

从Rails,我打电话给wget

system("wget", ...)

我想为这个调用设置一个超时,这样如果它需要太长时间(这可能意味着下载了太多文件,或者下载了大文件),我想停止它并向用户返回一个错误,以便我的服务器不会超载。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

你是否特别需要在子shell中运行这样的调用?如果没有,请使用超时和反引号:

require 'timeout'

Timeout.timeout(3) do
  puts `tree /`  # raises an exception, which you can rescue and handle
end

如果你确实需要在外部运行它,我会选择Subexec

之类的东西

答案 1 :(得分:1)

通常,尝试在SystemTimer中包装调用。 https://rubygems.org/gems/SystemTimer

在您的特定情况下,请尝试system("wget -T #{timeout_in_seconds}")