9

今日の午後、アップグレードした Rails 2.3.x -> 3.1 (rc4) アプリをテスト環境にデプロイした後、すべてのスタイルシートと JavaScript ファイルが 404 エラーを返しました。rake assets:precompile タスクをデプロイ後のスクリプトに追加しましたが、assets フォルダーに予期したプリコンパイル済みファイルがない理由を特定するのに時間がかかりました。

最終的に、デフォルトでは application.css と application.js (+ 非 JS/CSS ファイル) のみが処理されるため、ファイルはコンパイルされませんでした。

次の構成値を次のように変更する必要がありました。

config.assets.precompile += %w( *.js *.css )

質問: なぜこれがデフォルトではないのですか?

マニフェスト ファイルとして処理する必要のないものはすべて public/assets にコピーされると予想していました。私がアセット パイプラインで読んだことの多くは、基本的に「アセットを app/assets に貼り付け、マニフェスト ファイルを構成すれば、機能するはずです」というものです。assets:precompile タスクは何をしているのかについての情報を吐き出さなかったので、私たちが思っていたファイルを見ていないだけだと判断するのに時間がかかりました.

これがプリコンパイル構成に適した値ではない理由はありますか?

ありがとう!

4

2 に答える 2

9

アイデアは、すべての JavaScript と CSS を常に 1 回のショットでロードすることです。そうすれば、あちこちにたくさんの個別のファイルを含める必要はなく、常に「世界」をロードして作業する準備ができています。

これは「事前」の負荷が少し大きくなりますが、ブラウザはすべての JavaScript をキャッシュからロードし続ける必要があります。そのため、すべてがキャッシュされ、最初のリクエストの後に準備が整っているため、サイトの体感速度が速くなるはずです.

これは、Rails に含めることについて物議を醸す決定でしたが、CoffeeScript をデフォルトで含めることも同様です。Rails は常にそのように独断的なフレームワークでした。

于 2011-06-20T18:26:49.560 に答える
0

新しいスプロケット ベースのパイプラインは、/asssets/stylesheets 内のすべてのファイルをコンパイルし、/assets/javascripts はデフォルトでそれぞれ application.css と application.js にコンパイルされます。

ビューでは、アプリケーション ファイルをリンクするだけでよく、スプロケットが残りを処理します。

更新:すべてを 1 つのファイルにする必要はありません...

それらは javascript ファイルではなく、javascript ファイルのグループを確立するマニフェスト ファイルと考えてくださいjavascript_include_tag。デフォルトでは、フォルダー内のすべてを 1 つのファイルに含めることになっていますが、いつでも何を含め、何を含めないかを選択できます。

「プリコンパイル」タスクは、これらのマニフェスト ファイルを実行し、複数のファイルを 1 つにコンパイルするだけで、プリプロセスと sass または coffee スクリプトが実行されます。

于 2011-06-20T18:10:50.710 に答える