模型范围在本地工作,但不在Heroku上工作

时间:2014-02-04 20:08:12

标签: ruby-on-rails

我很惊讶地看到本地工作的范围在heroku上没有正确响应。 heroku是否定义了一次范围而不是一次?有没有更好的方法来编写这些范围?

# Offset date for early morning hours
if Time.now.hour < 4
  scope :upcoming, lambda { between(Date.tomorrow, Date.tomorrow+4.days) }
  scope :tomorrow, lambda { on(Date.today) }
  scope :today, lambda { on(Date.yesterday).not_over }
else
  scope :upcoming, lambda { between(Date.tomorrow+1.day, Date.tomorrow+5.days) }
  scope :tomorrow, lambda { on(Date.tomorrow) }
  scope :today, lambda { on(Date.today).not_over }
end

检查时间是否在上午12点到凌晨4点之间。如果是,则从昨天开始定义:today:tomorrow:upcoming。如果没有,它通常会定义范围。

当用户正在寻找即将到来的“今天”活动并且在周五晚上凌晨1点时,他/她将会看到一直持续到凌晨4点的事件。例如,一个尚未关闭的俱乐部。

Heroku通过else语句定义我的范围,无论它是什么时候。

1 个答案:

答案 0 :(得分:1)

这在本地工作,因为每次刷新页面时,本地网络服务器会重新加载所有类。在生产(heroku env)中,出于性能原因,这显然不会发生。在应用启动时,只加载一次类。因此,无论何时何时,它将定义创建哪组范围。

我建议像这样重写你的范围(将时间检查移动到范围本身):

scope :upcoming, lambda { 
  diff = Time.now.hour < 4 ? 0 : 1
  between(Date.tomorrow+diff.day, Date.tomorrow+(4 + diff).days) 
}
相关问题