Rails 3.1静的資産 - プロダクションのために事前縮小された資産はありますか?
-
27-10-2019 - |
質問
新しいRails 3.1生産モードでの資産パイプラインの私の理解は次のとおりです。->
- config.action_controller.asset_host =
"https://mybucket.s3.amazonaws.com"
- config.assets.compile = false
app/assets
リポジトリにチェックされます- バンドルexecレーキアセット:S3との事前コンパイルと同期(すべての資産)
public/assets
リポジトリにチェックされません
上記のすべてを使用して、RailsはS3のすべての資産を探していると思いましたが、リポジトリでは必要ありません。または、少なくとも私は必要ありません 事前コンパイルされました 資産の public/assets
レポで。
Herokuでこれを見つけました config.assets.compile = true
, 、フラットアウトは、S3にプリコンパイルされた資産が見つかりません。そしてヘロク しなければならない すべての資産のコンパイルフェーズを実行しますが、S3からサーバーをサーバーします。ランニング heroku run rake assets:precompile
スクワットはしません。生産プロセスは、再びすべてを再コンパイルします。
は?それは私には意味がありません。
私はあなたがあなたのレポを画像で埋める必要がないことを私に理解します、あなたのCDNに仕事をさせてください。
私はこれが間違っていると感じています。私は正しいですか、それとも間違っていますか?
解決
このセットがある場合:
config.assets.compile = false
資産のリクエストは、提供されるスプロケットに渡されることはありません。ファイルはどこかで事前にコンパイルされると予想されます。
をチェックしてください 資産パイプラインセットアップガイド Herokuサイトでは、機能するための特別なセットアップがあります。
他のヒント
間違いなくチェックしてください asset_sync githubで。または私たちのHeroku Dev Centerの記事 HerokuでRails 3.1でCDNアセットホストを使用する.
の問題 環境変数 最近、Heroku Labsプラグインによって解決されました。 heroku config
コンピレーション時間中にアクセス可能な変数。これを有効にするには、について読んでください user_env_compile プラグイン。あなたがもはや実行する必要がないことを意味します heroku run rake assets:precompile
アプリの展開後。
また。使用には非常に大きなパフォーマンス改善があります asset_sync vsアプリケーションを生産中にゆっくりとコンパイルしたり、アプリサーバーから直接プリコンパイルされているようにしたりすることができます。しかし、私はそれを言うでしょう。私はそれを書きました。
- ASSET_SYNCとS3を使用すると、すべての資産がAsset Host / CDNですぐに提供される準備ができていることを意味します。
- 必要なだけです :資産 アプリケーションのバンドル。RBプレタコンパイルのRB、生産のメモリを保存する
- アプリサーバーは、アセットリクエストのためにヒットすることはありません。高価な計算時間を費やすことができます。コンピューティング。
- ベストプラクティスHTTPキャッシュヘッダーはすべてデフォルトで設定されます
- 1つの追加構成で自動GZIP圧縮を有効にすることができます
私が理解することは決してない理由で、私は上記の答えを有用であるとマークすることはできません - しかし、私は自分の資産がAmazon S3にあり、アプリがHerokuに展開することに同じ問題を抱えていました。
単に「public/assets/manifest.yml」をチェックインするだけで、Herokuでは、「資産が事前に縮小されていない」の誤差を解決しました。
私のproduction.rbファイルを含めるように調整1) config.assets.precompile += %w( *.js *.css )
2) config.serve_static_assets = true
と3) config.assets.compile = true
私のためにトリックをしました。
これらを含める前に...私の開発環境にはすべてのJS / CSSアセットがロードされていましたが、Herokuでの生産にはそれらがありませんでした。
参照してください: Rails Precompile後にJavaScriptアセットがありません
私はあなたに大きなヒントを与えましょう、それを公式Herokuの方法でしてください:
http://devcenter.heroku.com/articles/cdn-asset-host-rails31
https://github.com/rumblelabs/asset_sync
それはあなたのためにそれをすべて行い、Herokuはプレリコンパイルし、Asset_Sync GemはそれをS3ディレクトリにコピーし、url_helpersは機能します。欠点は、プレコンパイルフェーズを実行する必要があること(ただし、スタッフが変更された場合にのみコピーする)を実行する必要があると思います。
何が起こっているのかは、資産が編集されているかどうかを知るためにマニフェスト.ymlを探しているということだと思います。このファイルはデフォルトで公開/資産にあり、それをレポにチェックしていないため、資産が編集されていないと仮定しています。ファイルの場所を変更してみてください config/environments/production.rb
そして、それが問題を修正するかどうかを確認します