2015-11-27 10 views
10

大量のアセットを持つRailsアプリで作業していますが、残念ながらこれを減らすことはできません。本番環境ではこれは問題ではありませんが、開発中に訪問ページあたり〜20件のアセットリクエストをアプリケーションサーバー(webrickやThinなど)ですぐに処理することはできません。アセットを自動的にコンパイルしてnginx(開発)で提供する

だから私はpublic/assetsで何かを提供するために開発でnginxを使い始めました。 nginxは純粋に開発機能であることに注意してください。私たちは本番環境でそれを使用するつもりはありません。 rake assets:precompile

は、悲しいことに二つの問題が(後者は最も重要なものであることがある

  • 設定しconfig.assets.debug
  • 実行するために:

    、それが機能するために私は二つのことをしなければなりませんでした)と私の設定:

    • すべてのアセットを手動で変更する必要がありますrake assets:precompileもう一度
    • 新しくコンパイルされたアセットをアプリサーバーが受け取るためには、再起動が必要です。

    プリコンパイル後にRailsサーバーを再起動する必要のない正しいnginx/Asset Pipelineの設定は何ですか?

    自動コンパイルも歓迎します。

+2

UnicornとPumaのような他のRailsサーバーを試しましたか?あなたはいつも[Guard](https://github.com/guard/guard)を使ってファイルの変更を監視し、 'rake assets:precompile'を実行してサーバを再起動することができます。 – max

+0

+1ガード。 Unicorn/Pumaは特殊なHTTPサーバではありません(特にUnicornは設計上高速なクライアントを想定しています)。可能であれば、資産としてnginxを使用したいと考えています。 – vemv

+0

アセットパイプラインを上回ったようなサウンドのようなものです.Railsは、開発時に静的資産を提供するために実際には構築されていません。デプロイメント時に実行されるはずです。だから、サーバを再起動するのはかなり厄介なことになるだろう。だから、あなたは、例えば、ハヤブサやブロッコリーを使って、代わりにあなたの資産を沸かせて見ることができます。 – max

答えて

3

このセットアップは私のために働いた:

  • rm -rf public/assets; rake tmp:clear tmp:cache:clear assets:clean assets:precompile
  • 打ち上げを実行し、Railsのサーバーを起動する前にconfig.asset_host
  • config.assets.debug = false
  • config.assets.digest = true
  • config.assets.compile = true
  • でnginxのポートを含めますRailsサーバー
  • アセットが変更されるたびに、rake assets:precompileを再度実行してください。ガードはそれを世話することができます。
1

これには多大な労力が必要ですが、アセットをコンパイルするにはgulpまたはgruntに切り替えることを検討してください。ノードjsを使用してを高速化プロセス(多くの記事、ここでは例1 http://blog.carbonfive.com/2014/05/05/roll-your-own-asset-pipeline-with-gulp/)です。 また、重要なアセットは、サーバーの再起動なしでコンパイルすることもできます(プロセスはファイル変更[フック]でトリガーされます)。私が関与しているプロジェクトでは、私たちの人の一人がこの種のスイッチを作ろうとしています。そして、彼が言うことから、私はそれが一日の仕事ではないことを理解しています。

関連する問題