2011-01-18 3 views
2

У меня есть имя области, который принимает результат запроса в качестве параметра:Cached named_scope на Heroku?

scope :current_budget, where(:budget_review => Appconfig.budget_status) 

Метод budget_status сама определена как

def self.budget_status 
    Appconfig.find_by_name('reviewed_budget').value=="1" ? true : false 
end 

При тестировании локально, если я изменил значение «reviewed_budget ", а затем снова вызовите область, все работает нормально.

Но на Heroku это всегда даст мне тот же результат, даже если я изменю параметр. Я попытался отобразить значение Appconfig.budget_status на Heroku, и он изменится, когда я изменю настройку.

Тем не менее, named_scope, похоже, не учитывает это.

Есть ли какой-то кеширующий трюк здесь? если да, то как мне избавиться от этого для этой конкретной ситуации? Else, есть ли у кого-нибудь представление о том, что может быть неправильным?

спасибо, p.

ответ

7

Когда вы тестируете локально, я предполагаю, что вы запускаете среду разработки, которая будет перезагружать весь ваш код каждый раз, когда он будет вызван и из-за этого избежать этой проблемы. В производстве (Heroku), однако, он будет кэшировать, а не результат, но запрос, объема, если он используется так же, как и в настоящее время.

Чтобы убедиться, что запрос не кэшируются вы можете использовать следующий синтаксис вместо:

scope :current_budget, lambda { where(:budget_review => Appconfig.budget_status) } 

лямбда-это то, что делает разницу в этом случае.

+0

спасибо, что сделал! – Pierre