【发布时间】:2009-08-18 00:57:05
【问题描述】:
我有一个 Ruby on Rails 应用程序,它有一个我使用 cron 和脚本/运行程序执行的计划作业。
作业的目的是查找任何过期的更新(“过时”,见下文),并且(在执行作业后)将作业的“到期日期”更新为预定义的分钟数。未来。
我遇到的问题是,当我设置“截止日期”时,使用的是“GMT”时间。但是,当我搜索过时的工作时,似乎使用了“本地”时间。服务器的本地时间与 GMT 相差 -7 小时,因此系统在两次更新之间会多出 7 小时。
示例:作业的截止日期是某天的 06:00。系统在西海岸时间 06:00 (-7 GMT) 找到该作业。如果作业在 15 分钟后再次到期,则它将“到期日期”设置为 06:15,在保存对象时更改为 13:15(未来 15 分钟和 7 小时后)。
我将在下面插入代码。如果有任何区别,'mark_updated' 是模型的一部分,而 self.stale 是同一模型中包含的模块中的类级函数。
顺便说一句...额外的问题 - 如何捕获正在从生产中的脚本/运行器作业执行的 SQL?这将使调试更容易。我对正在发生的事情进行了一些猜测。
def mark_updated
self.next_refresh_due_at = Time.now + update_interval_in_minutes.minutes
save
end
def self.stale(max = 3)
news_sources = NewsSource.find(:all,
:conditions => ["next_refresh_due_at < ?", Time.now],
:order => 'next_refresh_due_at ASC',
:limit => max)
return news_sources
end
【问题讨论】:
-
应用服务器是否有可能与 SQL 服务器分开?
-
他们都在同一个服务器上
标签: ruby-on-rails