9

今日の午後に私のテスト環境にアップグレードしたRails 2.3.x - > 3.1(rc4)アプリケーションを配備した後、私たちのスタイルシートとJavaScriptファイルはすべて404エラーを返していました。レークアセットを追加しました。デプロイ後のスクリプトにタスクをプリコンパイルするのですが、アセットフォルダにプリコンパイル済みのファイルがない理由を判断するのに時間がかかりました。Rails 3.1のアセットパイプライン - パブリック/アセットのファイルがありません - なぜこれがデフォルトではありませんか?

結局、application.cssとapplication.js(+非JS/CSSファイル)だけがデフォルトで処理されるため、ファイルはコンパイルされませんでした。

我々は次のように次の設定値を変更するために必要な:

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

質問:なぜ、これはデフォルトではありませんか?

マニフェストファイルとして処理する必要がないものは、単にパブリック/アセットにコピーされることが予想されます。私がアセットパイプラインで読んだことの大部分は、基本的には「アセット/アセットにアセットを貼り付けること、マニフェストファイルを設定すること、それだけでうまくいく」ことです。アセット:プリコンパイル・タスクは、それが何をしているのかについての情報を吐き出していないので、思っていたファイルを見ていないと判断するのに時間がかかりました。

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

ありがとうございます!

答えて

9

アイデアは、移動しながらビットとピースを読み込むのではなく、JavaScriptとCSSを常にワンショットで読み込むことです。そうすれば、あなたはいつでも「世界」がロードされ、仕事の準備ができています。

これは少し前の読み込み負荷ですが、ブラウザはキャッシュからすべてのjavascriptをロードし続ける必要があります。だから、サイトのスピードは、すべてがキャッシュされ、最初のリクエストの後に行く準備ができているためにスピードアップする必要があります。

これはRailsのために含めるための論争の決断だったが、これはデフォルトでのCoffeeScriptを含むです。 Railsは、常にそのような説得力のあるフレームワークでした。

+0

ありがとう、クリス、返信してください。効率化のためにHTTPリクエストを減らすことは理にかなっていますが、ほとんどのアプリケーションでCSSを少なくとも内部/外部スタイルシートとモジュール化されたJavaScriptファイルに分割していると思います。それは、Railsフレームワークの残りのものが物事を扱う方法からの実際の変化のように思えますが、デフォルトに基づいて、思考であったに違いないと確信しています。 – shedd

+0

まあ、モジュール化されたものにファイルをカットしたいのは間違いないでしょう。アイデアは、application.jsとapplication.cssには、それらのディレクトリ内のすべての特定のjavascriptとcssを取り込む「インクルード」が含まれているということです(これらのファイルを見ると 'require_tree。'ディレクティブが見つかるでしょうそのディレクトリ内のすべてとそのすべての子)。 –

+0

ほとんどのRailsアプリケーションは、実際にはCSSを異なるスタイルシートに分割することはありません。個別のソースCSS(およびJS)は、アセットパイプラインによって1つの集約application.css(または.js)にコンパイルされます。それでも、Railsのデフォルトがどうあるべきかについて私はあなたに同意する傾向があります。もし(* .js * .css)がデフォルトであれば、これはうまく動作するでしょう。あなたがしようとしていたこと。以前のバージョンのRailsは実際にあなたが提案したように機能したと思いますが、私たちが考えていない良い理由のために、もっと最近に変更しました。 – jrochkind

0

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

あなたの意見では、アプリケーションファイルをリンクするだけで、スプロケットが残りを処理します。

更新: さて、あなたはただ一つのファイルにそれをすべて行う必要はありません...あなたがshared.js、secure.jsとpublic.jsを持つことができ、それらはそれぞれ、彼らが必要とする部品が含まれています。 ..

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

'プリコンパイル'タスクは、単にそれらのマニフェストファイルを実行し、複数のファイルを1つにコンパイルします

+0

ありがとう、Colin。うん、私はそれを理解したが、質問はそれを超えて少し探求していた。 – shedd

+0

よく、少し洞察のためにポストを更新しました – colinross

関連する問題