2

在我的 Rails 控制器中,我想将文件下载到public项目的文件夹中(使用 Linux 系统命令wget)。然后我希望文件在那里停留一个小时,然后再调用命令rm删除它。我可以设置一个超时,以便代码执行在稍后恢复之前暂停吗?

4

1 回答 1

3

你不能设置超时有两个原因:
首先,该进程将被Web服务器超时杀死。
其次,即使你设置了适合你需要的超时时间,负责等待的进程也会吃掉资源,并且无法使用。要解决这个问题,你将不得不分叉另一个服务器进程,你真的需要这个吗?

但是你可以使用https://github.com/jmettraux/rufus-scheduler

例如,在您的控制器中

require 'rubygems'
require 'rufus/scheduler'

def download_using_wget
  ...
  if some_method_to_wget_file
    scheduler = Rufus::Scheduler.start_new

    scheduler.in '1h' do
      some_code_to_rm_file(file)
    end
  end
  ...

并且 some_code_to_rm_file 将在您 wget 文件后一小时内启动

于 2012-11-01T03:58:48.793 回答