2012-04-19 54 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