【问题标题】:Model scope works locally but not on Heroku模型范围在本地工作,但在 Heroku 上不工作
【发布时间】:2014-02-04 20:08:12
【问题描述】:

我很惊讶地发现在本地工作的范围在 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 语句定义我的范围。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    这对您在本地有效,因为您的本地网络服务器会在您每次刷新页面时重新加载所有类。在生产(heroku env)中,出于性能原因,这显然不会发生。类仅在应用启动时加载一次。因此,无论当时是什么时间,它都会定义创建哪组作用域。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2021-04-26
      • 2013-03-29
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      相关资源
      最近更新 更多