2012-04-19 68 views
1

,如果你想请更改标题...机架刷新页面/清除缓存(所有config.ru)

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

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

这就是问题出现的地方。我测试了重定向请求,在部署之后的一段时间,重定向仅在刷新页面后才起作用,这意味着,我在iPhone上键入我的网站的URL,首先尝试将给我的原始网站,而不是一个对于手机来说,在我刷新后它会被重定向。

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

我已经多次搜索这个解决方案,其中大部分是针对Rails应用程序,这对我来说并不是真的。我如何才能使它在config.ru中全部工作?

回答

1

它可能不那么简单。托托强制对所有页面进行缓存,Heroku运行Varnish。这意味着第一次请求甚至不可能打到你的应用程序。

但是当你点击刷新浏览器的请求可能包括no-cache或类似的东西,这使上光油打你的应用程序,这将触发移动检测,然后返回重定向。

在托托的代码将高速缓存是在这里:
https://github.com/cloudhead/toto/blob/master/lib/toto.rb#L345

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

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

如果这样的作品,那么你有一个简单的解决方案,虽然不是最有效的一个。

在任何情况下,我不认为你可以缓存页面,并在同一时间提供动态重定向。因此,该页面需要保持未缓存以便移动检测工作。

+0

谢谢你的回答。它清理了很多。还要感谢您指点我的代码行。我偶然发现了这个插件[rack-cache-purge](https://github.com/svenfuchs/rack-cache-purge),我真的不知道它究竟做了什么,但基于名字,我能当我点击第一个请求时清除缓存?或再次问题是第一个请求将不会打我的应用程序? – BPm 2012-04-19 17:15:23

+0

@BPm我不认为这会做你想做的。它没有文档,代码中有一些“TODO”部分。这意味着它可能没有完成代码。我会发送一封电子邮件给托托的作者,并将他转到这个页面......并询问他是否有任何好的想法如何解决这个问题。与此同时,以开发模式运行您的应用程序(请参阅Heroku文档,了解如何将RACK_ENV设置为“开发”)。另一个简单的解决方案是让你在Github上分叉Toto,并修补代码以删除设置缓存的行。 – Casper 2012-04-19 17:31:24

+0

谢谢您的确认:) – BPm 2012-04-19 17:48:36