7

本番モードでの新しい Rails 3.1 アセット パイプラインについての私の理解は次のとおりです:->

  1. config.action_controller.asset_host ="https://mybucket.s3.amazonaws.com"
  2. config.assets.compile = false
  3. app/assetsレポにチェックインされます
  4. bundle exec rake assets:プリコンパイルと S3 との同期 (すべてのアセット)
  5. public/assetsリポジトリにチェックインされていません

以上のことから、Rails は S3 上のすべてのアセットを検索するので、リポジトリにそれらのアセットは必要ないと思いました。または、少なくとも、リポジトリにプリコンパイルされたアセットは必要ありませんpublic/assets

私はherokuでこれを見つけました。持っていない場合config.assets.compile = true、S3でプリコンパイルされたアセットが完全に見つかりません。また、herokuはすべてのアセットのコンパイル フェーズを実行する必要がありますが、その後は S3 からサーバーに移行します。ランニングheroku run rake assets:precompileはスクワットをしません。生産プロセスはすべてを再コンパイルします。

は?それは私には意味がありません。

リポジトリに画像を入力する必要はなく、CDN に任せてください。

これは間違っていると感じています。私は正しいですか、それとも間違っていますか?

4

6 に答える 6

2

このセットがある場合:

config.assets.compile = false

アセットのリクエストが Sprockets に渡されて提供されることはありません。ファイルはどこかでプリコンパイルされることが予想されます。

Heroku サイトのアセット パイプライン セットアップ ガイドを確認してください。これを機能させるための特別なセットアップがあります。

于 2011-09-12T07:00:26.307 に答える
2

github でasset_syncを確認してください。または、Herokuで Rails 3.1 を使用した CDN アセット ホストの使用に関する Heroku デベロッパー センターの記事。

環境変数の問題は、heroku configコンパイル時にアプリケーションの変数にアクセスできるようにする Heroku labs プラグインによって最近解決されました。これを有効にするには、user_env_compileプラグインについてお読みください。heroku run rake assets:precompileこれは、アプリのデプロイ後に実行する必要がなくなることを意味します。

また。asset_syncを使用すると、アプリケーションが本番環境でアセットを遅延コンパイルしたり、アプリ サーバーから直接プリコンパイルして提供したりするのと比較して、パフォーマンスが大幅に向上します。しかし、私はそれを言うでしょう。私はそれを書きました。

  • asset_sync と S3 を使用すると、アセットをプリコンパイルできます。つまり、すべてのアセットがすぐにアセット ホスト / CDN で提供される準備が整っていることを意味します。
  • プリコンパイル時に application.rb の:assetsバンドルのみを要求できるため、本番環境でメモリを節約できます
  • アプリ サーバーがアセット リクエストにヒットすることはありません。高価な計算時間を費やすことができます。コンピューティング。
  • ベスト プラクティスの HTTP キャッシュ ヘッダーはすべてデフォルトで設定されています
  • 1 つの追加設定で自動 gzip 圧縮を有効にできます
于 2012-03-07T15:50:59.867 に答える
1

理解できない理由で、上記の回答を有用なものとしてマークすることはできませんが、AmazonS3にあるアセットとHerokuにデプロイされているアプリで同じ問題が発生しました。

「public/assets/manifest.yml」をチェックインするだけで、Herokuでの「アセットがプリコンパイルされていません」というエラーが解決されました。

于 2012-01-12T04:02:45.740 に答える
1

production.rb ファイルを調整して 1) config.assets.precompile += %w( *.js *.css )2)config.serve_static_assets = trueと 3)を含めるとconfig.assets.compile = trueうまくいきました。

これらを含める前に... 私の開発環境にはすべての JS / CSS アセットが読み込まれていましたが、Heroku の本番環境にはそれらがありませんでした。

また参照してください:プリコンパイル後に Rails JavaScript アセットが見つからない

于 2013-05-14T01:58:52.977 に答える
0

アセットがコンパイルされているかどうかを知るために manifest.yml を探していると思います。このファイルはデフォルトで public/assets にあり、リポジトリにチェックインしていないため、アセットがコンパイルされていないと想定しています。ファイルの場所を変更してみてconfig/environments/production.rb、問題が解決するかどうかを確認してください

于 2011-12-14T00:35:52.323 に答える
0

大きなヒントを与えましょう。Heroku の公式の方法で実行してください。

http://devcenter.heroku.com/articles/cdn-asset-host-rails31

https://github.com/rumblelabs/asset_sync

Heroku がプリコンパイルし、asset_sync gem がそれを s3 ディレクトリにコピーすると、url_helpers が機能します。欠点は、プリコンパイル フェーズを実行する必要があり (ただし、内容が変更された場合にのみコピーされる)、資産を git リポジトリに保存する必要があることだと思います。

于 2011-12-07T16:07:29.347 に答える