web-dev-qa-db-ja.com

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

インデックス機能を備えたシンプルなページコントローラーを使用して基本的な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
280
Chris Muench

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

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

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

config.assets.compileオプションがfalseに設定され、プリコンパイルされたファイルが欠落している場合、欠落しているファイルの名前を示す「AssetNoPrecompiledError」が発生します。

313
Chris Muench

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

bundle exec rake assets:precompile

Capistranoを使用している場合、バージョン2.8.0にはデプロイ時にこれを処理するレシピがあります。詳細については、Asset Pipeline Guideの「In Production」セクションを参照してください。 http://guides.rubyonrails.org/asset_pipeline.html

201
richardsun

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 \;
31
Don Law

Capistranoユーザーの簡単な修正は、この行をCapfileに入れることです。

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

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

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

bundle exec rake assets:precompile

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

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

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

11
Haris Krajina

開発環境でもまったく同じエラーが発生していました。最終的に、修正するために必要なことは、以下を追加することだけでした。

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
8
darchitect

また、プリコンパイルせずに本番環境で実行しようとすると、プリコンパイルされていないエラーがスローされるという問題もありました。 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)
5
mathdancer

簡単な修正を次に示します。

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

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

キャップ展開

4
fivetwentysix

今日、このエラーメッセージに遭遇し、特定の私のケースに解決策を投稿したいと考えました。私の問題は、cssファイルの1つに閉じ括弧がないため、ファイルがコンパイルされないことでした。実稼働環境向けにすべて(アセットのプリコンパイルを含む)を設定する自動化プロセスがある場合、これに気付くのは難しいかもしれません。

2
SnapShot

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

1
phillbaker

他のすべてが失敗した後...

私の解決策は、レイアウトファイルを

= stylesheet_link_tag "reset-min", 'application'

= stylesheet_link_tag 'application'

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

1
Victor Piousbox

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
Sandip Ransing

順調に進んでいるが、まだ運が悪いと思った場合は、touch/tmp/restart.txtまたは同等のコマンドを最後に実行してください。私は不運なリストにいましたが、今:)

0
Muntasim

おそらく、使用しているCSSにsyntax errorがあります。

このコマンドを実行する

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

それは例外を与え、それを修正し、あなたはすべて完了です。

ありがとう

0
Shoaib Malik