1

<head>だから、私は私の中に次のコード行を持っていますapp/views/layouts/application.html.erb

<%= stylesheet_link_tag "front", :media => "all" %>

これは開発では正常に機能しますが、本番環境に切り替えると、プリコンパイルされていないために壊れます。そのため、を実行しますrake assets:precompile。これにより、パブリックディレクトリに多数のファイルが追加されますが、すべてのcssファイルとjsファイルは次のような名前です。

  • application-digest.ext
  • application-digest.ext.gz
  • application.ext
  • application.ext.gz

はまたextはのどちらcssjsであり、digest明らかに異なります。

画像ファイルにはバージョンが付属しname.extていname-digest.extます。

そのため、ページに移動すると、通知が表示されActionView::Template::Errorますfront.css isn't precompiled

私はコントローラーごとに異なるレイアウトを持っているので(そしてそれが重要な場合はレイアウトをFrontController使用します)、帯域幅の恥ずべき無駄であるため、すべてのコントローラーレイアウト内にすべてのcssまたはjsファイルapplication.html.erb含めたくありません。

Railsに内部のすべてのファイルを個別にコンパイルするように指示するにはどうすればよいですか?app/assets


config.assets.compile = true内部に設定することでライブコンパイルを使用して問題を「修正」することができましたが、多くのリソースを浪費するため、config/environments/production.rbアセットを処理する最良の方法ではないすべての場所を読み続けています[1] 。

アプリはHerokuでホストされています。


[1]:公式のRuby on Railsガイドページ「このモードはより多くのメモリを使用し、デフォルトよりもパフォーマンスが低いため、お勧めしません。」

4

1 に答える 1

1

アセットをローカルでプリコンパイルしている場合は、herokuがアセットをロードするように、アセットをgitcommitする必要があります。しかし、これはあなたがやりたいことではありません。

/config/environments/production.rb

config.assets.precompile += %w(front.css, another.css, heres_a_javascript.js)

application.jsとapplication.cssは自動的にプリコンパイルされます。application.html(または実際にはどこでも)でリンクしている他のすべてのものは、ここでプリコンパイルする必要があります

于 2012-11-28T18:17:33.043 に答える