私はCDNとしてcloudflareを使用してHeroku上で実行しているレール(4.1)アプリケーションを持っています。 NewRelicからのエラーログでは、期限切れのCSSとJS資産のリクエストが一定していて、主にapplication-<fingerprint>.js
とapplication-<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」かを確認してください。
私の質問です。これは悪い習慣となるでしょうか?期限切れの資産の要求を処理するためのよりよい方法はありますか?
感謝のための資産の3つのバージョンまでのスプロケットを格納するのでHerokuのでの世話をされています。私はこれが正しいとは思わなかった!あなたはこれらのリクエストで何をすることをお勧めしますか?私は問題の一部は、 ":username /:post_name"というルートを持っていると思います。そのため、認識されていない資産は、 "ユーザー名"と ":post_name" [fingerprint] .js ".jsに対してInvalidCrossOriginRequestエラーが発生するか、.cssに対してUnknownFormatエラーが発生します。 – Sujimichi