在 Rails 中设置系统调用超时

Pau*_* S. 5 wget ruby-on-rails-3

在 Rails 中,我进行了系统调用wget

system("wget", ...)
Run Code Online (Sandbox Code Playgroud)

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

小智 3

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

require 'timeout'

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

不过,如果您确实需要在外部运行它,我会选择类似Subexec 的东西