rails 3.1.0 ActionView :: Template :: Error(application.cssはプリコンパイルされていません)


281

シンプルなページコントローラーを備えた基本的なRailsアプリをインデックス関数で作成し、ページを読み込むと次のようになります。

ActionView::Template::Error (application.css isn't precompiled):
    2: <html>
    3: <head>
    4:   <title>Demo</title>
    5:   <%= stylesheet_link_tag    "application" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8: </head>
  app/views/layouts/application.html.erb:5:in `_app_views_layouts_application_html_erb__43625033_88530400'

Gemfile

source 'http://rubygems.org'

gem 'rails', '3.1.0'

# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

gem 'execjs'
gem 'therubyracer'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails', "  ~> 3.1.0"
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
end

gem 'jquery-rails'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'

group :test do
  # Pretty printed test output
  gem 'turn', :require => false
end

7
bundle exec rake assets:precompileはそれを修正しているようですが、なぜそれが機能しないのですか?
Chris Muench、2011

10
私も幹部すくい資産バンドル実行後、本番で同じ問題を抱えている:プリコンパイル
ルーカスルナン

回答:


313

デフォルトでは、Railsは本番環境でファイルがプリコンパイルされていると想定します。本番環境でライブコンパイル(実行時にアセットをコンパイル)を使用する場合は、config.assets.compileをtrueに設定する必要があります

# config/environments/production.rb
...
config.assets.compile = true
...

このオプションを使用すると、プリコンパイル済みアセットを使用しているが、プリコンパイル済みファイルが欠落している場合にSprocketsにフォールバックできます。

もし config.assets.compileオプションをfalseに設定し、不足しているコンパイル済みのファイルがあるされますが不足しているファイルの名前を示す「AssetNoPrecompiledError」を取得します。


3
この記事の内容を試してみてください:devcenter.heroku.com/articles/rails31_heroku_cedar (まだ自分で試したことがありません)
Chris Muench

7
明確にするために、config.assets.compileオプションはconfig / environments / production.rbにあります(本番環境で作業している場合)。また、本番環境でライブ/レイジーコンパイルを実行できるようにする場合は、application.rbでレイジーコンパイルを有効にする必要もあります。
2010年

34
ランタイムコンパイルをアクティブにすることは、解決策ではありません。パフォーマンスヒットが発生するためです。解決策は、アセットのプリコンパイルの発生を妨げているコアの問題を修正することです。
David Tuite、2011年

5
RAILS_ENV = production bundle exec rake assets:precompileを使用してアセットをプリコンパイルしました。なぜこのエラーが発生し、このフラグも設定する必要があるのですか?
Tony

2
@Tony、おそらくapplication.css / js / imageファイル以外のものを要求し、それをに登録しなかったためapplication.rb。追加/編集application.rbconfig.assets.precompile += %w( first.css second.js )。これで、これらのファイルもコンパイルされます。スプロケットrequireでのみ使用する場合は、すべてのファイルを追加しないでください。ただし、<link>/でそれらを含める場合のみ<script>
10

202

本番環境でconfig.assets.compileをfalseに設定してアセットをプリコンパイルすると、パフォーマンスが向上します。このrakeタスクでプリコンパイルすることができます:

bundle exec rake assets:precompile

Capistranoを使用している場合、バージョン2.8.0には、デプロイ時にこれを処理するためのレシピがあります。詳しくは、アセットパイプラインガイドの「本番環境」セクションをご覧ください。http//guides.rubyonrails.org/asset_pipeline.html


14
これを行う方法を見つけるのがどれほど難しかったか、信じられません。
derekerdmann、2011

3
これは明らかに優れたオプションのようです。ライブコンパイルをtrueに設定すると、「メモリを多く使用し、デフォルトよりもパフォーマンスが低下するため、お勧めしません」。 guides.rubyonrails.org/asset_pipeline.html#live-compilation
andrew.rockwell

rake -Tまたはbundle exec rake -Tあなたの友達です。
ライアン

2
@Underworld Bundlerは、RubyアプリのGem依存関係を管理するためのツールであり、Rails 3に組み込まれています。Bundlerを使用している場合、実行bundle exec rake ...すると、アプリに適切なRakeと関連する依存関係が読み込まれます。bundlerを使用していない場合は、を実行しrake ...ます。
richardsun 2012

3
上記のコマンドを実行する場合は、環境が本番モードに設定されていることを確認するか、コマンドの前にRAILS_ENV = production
JESii

31

OK-同じ問題がありました。「config.assets.compile = true」を使用したくなかった-すべての.cssファイルをconfig / environments / production.rbのリストに追加する必要がありました。

config.assets.precompile += %w( carts.css )

次に、tmp / restart.txtを作成(および後で削除)する必要がありました

私は一貫してstylesheet_link_tagヘルパーを使用したので、追加する必要があるすべての追加のcssファイルを見つけました:

find . \( -type f -o -type l \) -exec grep stylesheet_link_tag {} /dev/null \;

メディアクエリと異なるcssファイルを異なる解像度で使用する場合、これが最善の方法です。
Fa11enAngel

1
すべてのcssファイルを配列に含める必要がありますか?40個のcssファイルがある場合はどうなりますか?
yozzz 2014年

30

capistranoユーザーの簡単な修正は、この行をCapfileに置くことです

# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'

11

これを読んでいるがapplication.css、代わりにカスタムCSSクラスに問題がないすべての人admin.css、たとえば、base.cssなど

解決策は前述のように使用することです

bundle exec rake assets:precompile

そしてスタイルシートの参照では単に参照 application.css

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

アセットパイプラインはすべてのスタイルシートをapplication.cssでプリコンパイルするため。これは開発でも発生するため、アセットパイプラインを使用するときに他の参照を使用することは間違っています。


8

開発環境でもまったく同じエラーが発生していました。結局、それを修正するために私がしなければならなかったすべては追加することでした:

config.assets.manifest = Rails.root.join("public/assets")

私のconfig / environments / development.rbファイルにそれを修正しました。アセットに関連する開発の最終構成は次のようになります。

config.assets.compress = false  
config.assets.precompile += %w[bootstrap-alerts.js] #Lots of other space separated files
config.assets.compile = false
config.assets.digest = true
config.assets.manifest = Rails.root.join("public/assets")
config.assets.debug = true

これが私にとって有効な唯一の解決策でした。たぶん、私のバージョンのRails(3.1.3)に問題があったのでしょうか?とにかく、私のアセットはpublic / assetsに正常にプリコンパイルされ、それらのファイル名はmanifest.ymlにリストされているのと同じSHAを持っていることを確認できました。何らかの理由で、Railsは適切な場所でアセットを探していませんでしたが、私のセットアップは常に以前はうまく機能していました。この変更により修正されました。
アンチノーム2012

この解決策をありがとう。開発モードでいくつかのことをテストしようとしていましたが、すでにプリコンパイルされたアセットがあり、ディレクトリにpublic / assets / application.cssが存在していても、「application.cssはプリコンパイルされていません」と表示されていて驚きました。彼らは生産に行うように、彼らは..開発に自動的にあなたのためのconfig.assets.manifestを設定していない驚い
タイラーリック

5

また、この問題がありました。プリコンパイルせずに本番環境で実行しようとすると、プリコンパイルされていないエラーがスローされます。application.rbとコメントされている行を変更する必要がありました。

  # If you precompile assets before deploying to production, use this line
  # Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  Bundler.require(:default, :assets, Rails.env)

2
後でこれに遭遇する人のために明確にしたいだけです。上記で変更する必要があるコードは次の場所にありますconfig/application.rb
GMA

4

クイックフィックスは次のとおりです。

capistranoを使用している場合は、これをdeploy.rbに追加します。

after 'deploy:update_code' do
  run "cd #{release_path}; RAILS_ENV=production rake assets:precompile"
end

キャップデプロイ


2

今日このエラーメッセージに遭遇し、私の特定のケースに解決策を投稿したいと思いました。私の問題は、私のcssファイルの1つに閉じ中かっこが欠けていて、これが原因でファイルがコンパイルされなかったことでした。本番環境用に(アセットのプリコンパイルを含む)すべてをセットアップする自動化プロセスがある場合、これに気づくことは難しいかもしれません。


1

結局のところ、失敗しました...

私の解決策は、レイアウトファイルをから変更することでした

= stylesheet_link_tag "reset-min", 'application'

= stylesheet_link_tag 'application'

そしてそれはうまくいった!(リセットファイルをマニフェスト内に配置できます。)


1

Herokuでこれを修正するもう1つの方法:Rakefileがコミットされ、プッシュされていることを確認します。


0

herokuサーバー(読み取り専用ファイルシステム)で、cssのランタイムコンパイルが必要な場合(推奨されませんが、実行できます)、以下のような設定を行っていることを確認してください-

# inside config/application.rb
config.assets.enabled = true
config.assets.prefix = Rails.root.join('tmp/assets').to_s

# If you are using sass then keep gem outside of asset group
 gem 'sass-rails',   '3.1.4'

# inside config/environments/production.rb
config.assets.compile = true

0

すべてを順守しているのに不運であると思われる場合は、最後にtouch / tmp / restart.txtまたは同等のコマンドを実行することを確認してください。私は不運なリストにいましたが、今:)


0

あなたはおそらく持っています syntax errorあなたが使用しているCSSにをます。

このコマンドを実行する

$ bundle exec rake assets:precompile RAILS_ENV=development --trace

例外が発生し、修正され、すべて完了します。

ありがとう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.