2016-08-22 7 views
0

私はCDNとしてcloudflareを使用してHeroku上で実行しているレール(4.1)アプリケーションを持っています。 NewRelicからのエラーログでは、期限切れのCSSとJS資産のリクエストが一定していて、主にapplication-<fingerprint>.jsapplication-<fingerprint>.css(期限切れの指紋がある)があります。有効期限が切れている資産からリダイレクトする

これらのリクエストを現在の資産にリダイレクトする方法については疑問がありますが、これが良いか安全かどうかは不明です。

私は

get "assets/:asset_name" => "assets#show" 

を追加してassets_controller.rbを追加したい私のルートで

:私は舞台の環境でこれを試してきましたし、それが動作しますが、私は」

class AssetsController < ApplicationController 
    skip_before_action :authenticate_user! 
    skip_before_action :verify_authenticity_token, :only => [:show] 

    def show  
    begin 
     asset_name = params[:asset_name].gsub(/-[0-9a-f]{32}$/, "") << ".#{params[:format]}" 

     if ["css", "js"].include?(params[:format]) 
     redirect_to "/assets/" + Rails.application.assets.find_asset(asset_name).digest_path 
     else 
     return asset_not_found! 
     end 

    rescue 
     return asset_not_found! 
    end 
    end 

    private 

    def asset_not_found! 
    render :text => "asset #{params[:asset_name]}.#{params[:format]} not found", :status => 404 
    end 

end 

これが正しいかどうかわからない。
特に、skip_before_action :verify_authenticity_tokenの場合は気になりますが、.jsアセットのリクエストがなければ、InvalidCrossOriginRequestエラーが発生します。

私は期限切れのcssとjsアセットのリクエストのみを表示します。イメージアセットのリクエストは表示されません。そのため、上記のリクエストフォーマットは「css」か「js」かを確認してください。

私の質問です。これは悪い習慣となるでしょうか?期限切れの資産の要求を処理するためのよりよい方法はありますか?

答えて

0

私はこれを悪い習慣と考えています。

idを実装した方法は特にありません(ラックミドルウェアを使う方が良いとは思っていますが)が、期限切れの資産をどこにでもリダイレクトするべきではないという事実が原因です。

古いフィンガープリントを持つcssまたはjsファイルをユーザーが要求した場合、古くなっているhtmlドキュメントがある可能性が高いため、彼が持っているものをリロードすることをお勧めします。「新しいバージョンがあります。サイト"。

展開は@phoetあなたhttps://devcenter.heroku.com/articles/rails-4-asset-pipeline#only-generate-digest-assets

+0

感謝のための資産の3つのバージョンまでのスプロケットを格納するのでHerokuのでの世話をされています。私はこれが正しいとは思わなかった!あなたはこれらのリクエストで何をすることをお勧めしますか?私は問題の一部は、 ":username /:post_name"というルートを持っていると思います。そのため、認識されていない資産は、 "ユーザー名"と ":post_name" [fingerprint] .js ".jsに対してInvalidCrossOriginRequestエラーが発生するか、.cssに対してUnknownFormatエラーが発生します。 – Sujimichi

関連する問題