我正在使用Play Framework 2.3.8(在2.2.4上遇到同样的问题,升级没有帮助)。
我没有使用Play Framework的Cache API。但似乎GET结果仍然以某种方式被Play奇怪地缓存。
例如,如果我点击api GET /api/GetPurchases
,我会得到2个结果。 Play会记录GetPurchases
api已被点击(我还会覆盖OnRouteRequest
中的Global.java
并将其记录在那里)。然后我会点击api POST /api/CreatePurchase
并确认数据库中现在有3个购买对象。
我会再次致电GET /api/GetPurchases
,我会得到2个结果。日志显示,好像api /api/GetPurchases
从未被击中过。
此外,这只有在我的应用程序部署到Heroku时才会发生。本地一切都很完美。但是我已经说过Heroku的支持,以确保Heroku只是平台,他们永远不会让Play采取任何不同的行动。
答案 0 :(得分:1)
我们最终发现Play Framework正在缓存GET结果。
我们发现默认情况下,Play不会将结果缓存在开发模式中(因此在本地部署时)。但在生产模式下(因此在部署到Heroku时),Play会默认缓存结果。
要更改此设置,我们在操作方法中添加了这行代码,我们不希望Play缓存结果:
response().setHeader(CACHE_CONTROL, "no-cache");
通过运行foreman start
本地模拟生产部署也很有帮助。
感谢上述评论中的Salem和millhouse