構成: Heroku 上の Rails 4、HTML、CSS。
Rails 4 アプリを 5 か月間運用しています。これが私の production.rb の内容です。
config.serve_static_assets = false
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
# Generate digests for assets URLs.
config.assets.digest = true
config.assets.enabled = true
config.assets.initialize_on_precompile = true
config.action_controller.asset_host = "//dynasfakeurl.cloudfront.net"
本番環境にプッシュするときはいつでも、 を使用してアセットをクリーンアップしてから、 を使用rake assets:clean
してプリコンパイルしますrake assets:precompile
。これによりアセットのフィンガープリントが作成され、クラウドフロント経由で提供される S3 静的ファイル バケットに直接プッシュされます。次に、アプリをライブで Heroku にプッシュします。
.html.erb ホームページで、次のように Rails タグを介して静的ファイルを呼び出します。
<%= image_tag "picture.png" %>
<%= stylesheet_link_tag "application" %>
指紋を使用して正しくレンダリングするもの。たとえば、2 番目に最近生成されたアセット パスは次のとおりです。http://dynasfakeurl.cloudfront.net/assets/application-17892abdffc77f1fb1be125bab.css
通常、これはうまく機能します。ただし、最後のプッシュから 12 ~ 16 時間後に、すべてのアセット パスが自然にフィンガープリントを失うという問題が 2 回発生しました。たとえば、スタイルシート タグは最後にこのアセット パスを生成しました: http://dynasfakeurl.cloudfront.net/stylesheets/application.css
. これは存在しません。したがって、ページをロードすると、アセットのロードに失敗します。
私はこれをデバッグしようとして過去数時間立ち往生していましたが、何もプッシュせずにアセットパスが自然に本番環境でフィンガープリントを失う理由を理解できません.