【发布时间】:2012-09-06 11:22:05
【问题描述】:
我有一个用于食谱的 Rails 模型。 它有一个属性views,它计算它被查看了多少次。
在我的控制器的显示动作中,我正常获取模型对象:
@recipe = Recipe.find(params[:id])
然后我增加查看次数并保存:
@recipe.views = @recipe.views + 1
@recipe.save
这在本地运行顺利,但在 Heroku 上,保存显然不会发生。 不会抛出任何错误。
我可以在 Heroku 上的 rails 控制台中运行完全相同的代码,然后它就可以工作了。
我可以让它工作的唯一方法是设置
config.cache_classes = false
在环境/production.rb 中
这显然不是我想要的,但我不知道如何从这里开始。
我在 Cedar 堆栈上运行 Rails 3.2.8、Ruby 1.9.3,在开发和生产中都使用 Postgresql 9.1。
【问题讨论】:
-
只是为了清理代码,你可以使用
@recipe.increment!(:views)作为你的计数器(还有!爆炸会抛出任何错误)。你用的是什么数据库? -
本地和 Heroku 上都是 postgresql 9.1。我有一种强烈的感觉,这是某种缓存问题(甚至没有在 Heroku 上命中该操作)。不过,我想知道为什么 cache_classes = false 使它起作用。如果我将其设置回 true,则保存将停止工作。
-
没有抛出任何错误,但是您在日志中看到任何提示吗?
-
为什么不使用印象派宝石,它更容易github.com/charlotte-ruby/impressionist 和一个例子stackoverflow.com/questions/4815713/…
-
+1 承认错误 :)
标签: ruby-on-rails heroku ruby-on-rails-3.2