Ubuntu-> Apache-> Phusion Passenger-> Rails 2.3
私のサイトの主要部分はあなたのクリックに反応します。したがって、リンクをクリックすると、リンク先に移動し、すぐにページを再生成します。
ただし、戻るボタンを押すと、新しいページは表示されません。残念ながら、手動で更新しないと表示されません。ブラウザがキャッシュしているようです。ブラウザがページをキャッシュしないことを確認したい。
個別に、私はdoすべての静的アセットに将来の有効期限を設定したい。
これを解決する最良の方法は何ですか? Railsでこれを解決する必要がありますか?アパッチ? Javascript?
ジェイソン
ああ。これらの提案のどちらも、私が探している動作を強制するものではありませんでした。
たぶんjavascriptの答えがありますか? Railsコメントにタイムスタンプを書き出してから、時間が5秒以内(または何でも機能する)であるかどうかをjavascriptでチェックすることができます。 、それからページをリロードしますか?
これはうまくいくと思いますか?
ご助力いただきありがとうございます、
ジェイソン
最後にこれを理解しました- http://blog.serendeputy.com/posts/how-to-prevent-browsers-from-caching-a-page-in-Rails/ in application_controller.rb
class ApplicationController < ActionController::Base
before_filter :set_cache_headers
private
def set_cache_headers
response.headers["Cache-Control"] = "no-cache, no-store"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
end
この行を使用して、コントローラーである程度の成功を収めました。 SafariとInternet Explorerで動作しますが、Firefoxで動作するのを見たことがありません。
response.headers["Expires"] = "#{1.year.ago}"
2番目のポイントとして、Rails
stylesheet_link_tag
ウェブサーバーのデフォルト設定のままにしておくと、通常、アセットはかなり適切にキャッシュされます。
よりクリーンな方法は、いくつかのロジックに基づいてCache-Controlヘッダーを変更するRackミドルウェアを作成することです(たとえば、application/xml mime-typeのみ)。または、いですが、まだ機能しているアプローチのために、ActionDispatch :: Response :: DEFAULT_CACHE_CONTROL定数を 'no-cache'に変更できます。もちろん、コントローラーやアクションの粒度が必要な場合は、コントローラーでこれを行うことをお勧めします。
注:キャッシュを条件付きでクリアすることはできません(before_filter
がreset_cache
を呼び出すのは、ユーザーが既にそこにいる場合など)。 無条件キャッシュをクリアする必要があります。ブラウザーは、前回は必要なかったとしても、今回はリロードする必要があるかどうかを確認するためだけに新しいリクエストを作成しないためです。
例:
before_filter :reset_cache, if: :user_completed_demographics?
ブラウザは[戻る]ボタンで元のキャッシュヘッダーを使用するため、ユーザーがそこに行った後に戻ってくるのを防ぐためには機能しません。
before_filter :reset_cache
ただし、最初のリクエストでブラウザがno-cache, no-store, ...
を取得し、それを将来のページの読み込みに適用するため、(ページを更新し、これを追加する前にキャッシュをクリアした後は明らかに)動作します。