【问题标题】:Rack refresh page / clear cache (all in config.ru)机架刷新页面/清除缓存(全部在 config.ru 中)
【发布时间】:2012-04-30 11:38:23
【问题描述】:

如果需要,请更改标题...

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

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

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

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

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

【问题讨论】:

    标签: ruby caching rack


    【解决方案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

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

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

    【讨论】:

    • 感谢您的回答。它清除了很多。还要感谢您指出我的代码行。我偶然发现了这个插件rack-cache-purge,我真的不知道它到底是做什么的,但是根据名称,当我遇到第一个请求时,我能清除缓存吗?或者问题是第一个请求甚至不会命中我的应用程序?
    • @BPm 我认为这不会满足您的要求。它没有文档,并且代码中有一些“TODO”部分。这意味着它可能还没有完成代码。我会向 Toto 的作者发送一封电子邮件,并让他访问此页面......并询问他是否有任何解决问题的好主意。同时,只需在开发模式下运行您的应用程序(请参阅 Heroku 文档如何将 RACK_ENV 设置为“开发”)。另一个简单的解决方案是你在 Github 上 fork Toto,只需修补代码以删除设置缓存的行。
    猜你喜欢
    • 2017-05-24
    • 2019-08-02
    • 1970-01-01
    • 2023-03-18
    • 2011-03-14
    • 2011-08-14
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多