2015-12-08 10 views
7

最近、Herokuへの最近の展開で、私は警告advising not to use AssetSyncを得ました。HerokuのAssetSync gemの代替

remote: ###### WARNING: 
remote:  You are using the `asset_sync` gem. 
remote:  See https://devcenter.heroku.com/articles/please-do-not-use-asset-sync for more information. 

我々はAssetSyncを使用することによって解決しようとしていた元の問題は、我々は我々のアプリケーションで大きな資産に起因する巨大なナメクジのサイズを取得したということでした。 Herokuが許している300MBのうち、私たちのgit repoは約80MBに過ぎませんが、おそらく230MBに近いものを使用していました。

AssetSyncを使用して、Cloudfrontを介して配信されるS3バケットにすべてのコンパイル済みアセットを同期させることで、この問題を解決しました。 AssetSyncを実行すると、スラッグサイズを減らすために、すべてのプリコンパイルされたアセットを削除するフックがあります。基本的には、スラグのコンパイル時のワークフローは、このように見えた:

  1. HerokuのはAssetSyncがコンパイルされた資産のすべてのローカルコピーが

を削除しているS3

  • にすべてのコンパイル済みの資産を同期する資産
  • をプリコンパイルしてみましょうリンクされた記事は、なぜそれが悪いのか、何を代わりに使うべきかについて、いくつかの点を主張している。

    Asset Syncを使用すると、エラーが発生する可能性があります。デバッグが難しく、 が不要で、複雑さが増します。それを使用しないでください。代わりに、 CDNを使用してください。

    [...]

    あなたは今の代わりにCDNを使用する必要があります。 をプリコンパイルした後でS3にコピーするのではなく、CDN がウェブサイトから取得します。それがより良い理由がいくつかあります。

    Canonicalの資産

    [...]それはあなた 店舗情報シングル、正式な場所を持つことができます。その情報を変更する必要がある場合は、 のみを1か所で変更する必要があります。 [...]資産が同期した後に誰かが のデプロイメントに失敗した場合はどうなりますか?誰かがS3バケットのファイル を変更するとどうなりますか?資産のコピーを修正する代わりに、 を修正する必要があります。

    を展開する決定論

    あなたはHerokuの実行はbashでダイノの内部をデバッグしている、あなたは すくい資産を実行する場合:プリコンパイルこれは自分のローカルコピーを変更しません。 は実際にS3上のコピーも変更します。 [...]ネットワークにグリッチがあると、 asset_syncの同期部分も失敗する可能性があります。 ファイルの一部しか書き込めない場合や、アセットの半分だけが同期されている場合はどうなりますか? これらのことが起こります。

    私は彼らの意見に同意しますが、質問が残っています。ヘルパーアプリケーションを展開するには、プリコンパイルされたアセットがスラッグに格納されているときに膨大なものがあります。

  • +0

    ここに何かを見つけましたか? – hso

    答えて

    -1

    どのアセットファイルがスラッグを大きくしているのですか?

    デフォルトでは、Railsのアセットパイプラインは、JS、CSS、いくつかのロゴなど、限られた限られた内部アセットに対してのみ使用する必要があります。

    Gitディレクトリのサイズが大きくなっているように、多くの理由から大量の外部ファイルや大きなファイルをRailsのアセットとして保存するのは良い考えではありません。

    +0

    これは質問には答えず、また間違っています。 – sevenseacat