在没有客户端请求的Web服务器中执行操作

时间:2015-03-06 14:28:54

标签: ruby webserver sinatra

我正在研究Sinatra单一用途应用程序,该应用程序正在对某些服务进行api调用。我想服务器可以在预定时间执行该操作,并在请求时为客户端存储结果。

现在我只根据用户请求刷新:

class App < Sinatra::Base
get '/data' do
  if time_to_update
    make_external_api_call
  end
  send_data

我想将两者分开。如果time_to_update移动到单独的函数中并且每小时执行一次,那么路由'/ data /看起来像

get'/data' do
  send_data

1 个答案:

答案 0 :(得分:0)

基本上你需要的是设置一个cron作业:

  

软件实用程序Cron是类Unix计算机操作系统中基于时间的作业调度程序。设置和维护软件环境的人使用cron来调度作业(命令或shell脚本),以便在固定的时间,日期或间隔周期性地运行。

Wiki

艰难的方式

为此,您需要提取假定要定期执行Rake任务的代码,并配置cron以正确执行它。

ubuntu的示例将在终端中运行:

$ crontab -e

打开要编辑的文件,在其中定义作业。你可以使用类似的东西:

0 * * * * cd <path/to/your/project> && rake <your_task_name>

简单方法

您可以使用gem whatever。有关使用它的更好说明,请查看此rails cast episode

祝你好运!