2012-11-01 35 views
2

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

+0

检查此截屏启动。 http://railscasts.com/episodes/164-cron-in-ruby – HungryCoder

回答

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文件

+0

感谢您的回答,antiqe。我想要做的是让控制器使用'wget'下载文件,将文件发送给用户(实际上让用户下载文件),然后从服务器上删除文件。我可以做,而不必设置超时? –

+0

不知道我是否正确理解你?尝试 after_filter delete_file_after_file_send – antiqe

+0

换句话说,要发送文件给用户使用send_file方法而不是给用户永久链接 – antiqe