2012-03-14 16 views
17

生産モードでは、レールはアセットパイプラインからプリコンパイルされたアセットを見つけることができません。Railsで私の資産が見つからないのはなぜですか?

私はCentOS上でRVM内で動作するrails 3.2.0とruby 1.9.3を使用しています。このアプリケーションと連携して実行中のWebサーバーはありません。もともとレール3.0アプリだったので、アプリケーションはアセットパイプラインを使用するように最近更新されました。私が期待するよう

rake assets:clean 
rake assets:precompile 

を実行した後、私は、公共/資産のハッシュ化されたコンテンツを参照してください。ファイルの最後にあるハッシュは、ページソースに表示されているハッシュと一致します。

しかし、実行時に、ここで私は、すべての資産のRailsのために見るものだが奉仕しようとします:私は、各資産の中に収容されているフォルダを参照することではないよ

Started GET "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" for 75.149.58.169 at 2012-03-14 11:42:43 -0700 

ActionController::RoutingError (No route matches [GET] "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"): 

を。資産へのすべての参照は、これらのようになります。

//css: 
.class { 
    background: url(asset.png) no-repeat; 
} 

//erb: 
<%= image_tag "asset.png" %> 
<%= link_to "page", :class => "class" %> 
production.rbで

資産パイプライン関連の設定:

config.serve_static_assets = false 
config.assets.enabled = true 
config.assets.compress = true 
config.assets.debug = false 
config.assets.compile = false 
config.assets.digest = true 

そして最後に、設定/ application.rbからの資産の設定:

config.assets.enabled = true 
config.assets.version = '1.0' 

レールサーバープロセスを開始するユーザーは、パブリック/アセットに対する読み取り、書き込み、および実行の許可を持っているため、アクセス権の問題ではないと思います。私は構成ステップを逃しましたか?

編集

に私は、資産がプリコンパイルされていないことを示すエラーがないことに気づいたので、私はに「/assets/application-892c6227e631daf9a8e041b1d4d002ec.css」を付加することにより、Webページからスタイルシートにアクセスしよう

http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" 

これが機能し、スタイルシートが開きました。

+0

関連/複製:http://stackoverflow.com/questions/5760661/rails-favicon-ico-not-found –

答えて

26

この問題のさらなる再探索は、このSO記事をもたらした:

application.css not being served as an asset

config.serve_static_assets = false 

がいる限り、私のRailsアプリケーションは、Apacheやnginxの

の背後で実行されていないと間違った設定であると思われます
+0

私はこれによってキャッチされました。通常はApacheを使用しますが、この機会にIIS経由でThinを使用していました。ありがとう! – kim3er

4

私はこの同じ問題を抱えていましたが、私はあなたのスタイルシートが指紋ではない、キャッシュされていないファイルのバージョン。アセットパイプラインを使用している場合は、それを利用するために、指紋でキャッシュされたバージョンのファイルを指すヘルパーを使用する必要があります。これを行うには、あなたのCSSファイルにerbを埋め込むか、sassを使用する必要があります。

は正しくない:

.class { 
    background: url(asset.png) no-repeat; 
} 

は正しい(SASSを使用しています):

.class 
    background: image-url('asset.png') no-repeat 

詳細については、こちらをご覧ください:http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

あなたはパフォーマンスの問題を気にしない場合は、あなたをRails 4またはRails 3.2.16にアップグレードするまでキャッシュされていないバージョンを使用することで逃れることができます。これらのバージョンでは、アセットパイプライン対応する構文)。新しい構文を使用しない場合、キャッシュされていないバージョンは本番環境ではまったく動作しません。

+0

ねえ、ありがとう!しかし、この質問が掲載されて以来、私たちは資産をCDNに移行させましたが、将来のRailsプロジェクトではこれを覚えています! – BrMcMullin

+0

あなたは大歓迎です! :D –

関連する問題