Sinatra sinatra 中计划任务的问题

yu3h40 · 2015年01月13日 · 最后由 Rei 回复于 2015年01月14日 · 8025 次阅读

有一个需求是每小时生成一个随机数。 目前用 rufus-scheduler 实现了单独的功能。。但是整合到 sinatra 时出现了问题 如果直接 require 的话会导致 sinatra 应用没有执行.. 求解 = =#

用 Linux 的 Crontab 调用 rake 任务

部署到 heroku 之类的地方的话没法用 Crontab 所以还是需要 rufus-scheduler 这类的东西

以下代码很久以前是好用的不知道现在还能不能跑了你就自己试试吧

require 'rubygems'
require 'sinatra'
require 'rufus/scheduler'

configure do
  scheduler = Rufus::Scheduler.start_new 

  # 启动之后每分钟打印输出当前时间到文件中
  scheduler.every '1m' do
    File.open(File.dirname(__FILE__) + '/log.txt',"a+")
      file.puts "start work at #{Time.new.strftime('%Y-%m-%d %H:%M:%S')}"
    end
  end
end

get '/' do
  "start work at #{Time.new.strftime('%Y-%m-%d %H:%M:%S')}"
end

#3 楼 @ywjno thx!问题解决了 现在的 rufus-scheduler 创建的时候用.new 取代了.start_new 但是测试还是有点问题... 下面的代码是每秒输出一次 unix 时间。。但输出的结果有时间隔会在 2s

require 'sinatra'
require 'rufus/scheduler'

configure do
  scheduler = Rufus::Scheduler.new 
  # test
  scheduler.every '1s' do
    puts Time.now.to_i
  end
end

get '/' do
  "start work at #{Time.new.strftime('%Y-%m-%d %H:%M:%S')}"
end

这是输出的结果

1421213271
1421213272
1421213273
1421213274
1421213276
1421213277
1421213278
1421213279
1421213280
1421213282
1421213283

猜想是因为间隔太短。。可是调到了 5s 以后依然这样

1421213425
1421213430
1421213436
1421213441
1421213446
1421213451
1421213456
1421213461

#5 楼 @Rei 是不是还需要设置云主机上的时区什么东西才行?

#6 楼 @ywjno 我还没用上。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号