2

如果您愿意,请更改标题...

我使用toto作为我网站的博客引擎。所以它使用 Rack、Heroku 并且所有设置都可以很好地放在文件config.ru中,这就是我喜欢它的原因,因为它让一切对我来说都很简单。

我使用 Rack 插件:mobile detect来检测移动设备,然后重定向到不同的站点。

这就是问题所在。我测试了重定向请求,部署后一段时间,重定向只有在我刷新页面后才有效,这意味着我在 iPhone 上输入我网站的 URL,第一次尝试会给我原始网站,而不是那个对于移动设备,在我点击刷新后它会被重定向。

我认为这是因为服务器上的缓存(因为即使我清除了手机上的所有缓存,它仍然会发生)。所以这引出了我的问题:什么 Rack 功能/插件可以让我自动清除服务器上的缓存,或者在检测到移动设备时强制浏览器刷新。

我已经用谷歌搜索了很多次这个解决方案,其中大部分是针对 Rails 应用程序的,这并不适合我。我怎样才能让它在所有工作中发挥作用config.ru

4

1 回答 1

1

可能没有那么简单。Toto 强制缓存其所有页面,而 Heroku 运行 Varnish。这意味着第一个请求不太可能会命中您的应用程序。

但是当您在浏览器上点击刷新时,请求可能包含no-cache或类似的内容,这会使 Varnish 访问您的应用程序,这会触发移动检测,然后返回重定向。

Toto 中设置缓存的代码在这里:
https ://github.com/cloudhead/toto/blob/master/lib/toto.rb#L345

您可以看到,如果您在开发模式下运行应用程序,则不会使用缓存。这应该是一个简单的测试,看看缓存是否确实是问题所在。

https://devcenter.heroku.com/articles/config-vars#production_and_development_modes

如果可行,那么您就有了一个简单的解决方案,尽管不是最有效的解决方案。

无论如何,我认为您不能缓存页面并同时提供动态重定向。因此,页面需要保持未缓存状态,移动检测才能正常工作。

于 2012-04-19T08:34:25.780 回答