インデックス機能を備えたシンプルなページコントローラーを使用して基本的な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
デフォルトでは、Railsは本番環境でファイルがプリコンパイルされていると想定しています。本番環境でライブコンパイル(実行時にアセットをコンパイル)を使用する場合は、config.assets.compileをtrueに設定する必要があります。
# config/environments/production.rb
...
config.assets.compile = true
...
プリコンパイル済みアセットを使用しているが、プリコンパイル済みファイルが欠落している場合、このオプションを使用してスプロケットにフォールバックできます。
config.assets.compile
オプションがfalseに設定され、プリコンパイルされたファイルが欠落している場合、欠落しているファイルの名前を示す「AssetNoPrecompiledError」が発生します。
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
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 \;
Capistranoユーザーの簡単な修正は、この行をCapfileに入れることです。
# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'
これを読んでいるが、application.css
に問題がなく、代わりにカスタムCSSクラスに問題がないすべての人のためにadmin.css
、base.css
など.
解決策は前述のように使用することです
bundle exec rake assets:precompile
そしてスタイルシートの参照では、単にapplication.css
を参照します
<%= stylesheet_link_tag "application", :media => "all" %>
アセットパイプラインは、application.css内のすべてのスタイルシートをプリコンパイルするためです。これは開発でも発生するため、アセットパイプラインを使用する場合、他の参照を使用するのは間違っています。
開発環境でもまったく同じエラーが発生していました。最終的に、修正するために必要なことは、以下を追加することだけでした。
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
また、プリコンパイルせずに本番環境で実行しようとすると、プリコンパイルされていないエラーがスローされるという問題もありました。 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)
簡単な修正を次に示します。
Capistranoを使用している場合、これをdeploy.rbに追加します。
after 'deploy:update_code' do
run "cd #{release_path}; Rails_ENV=production rake assets:precompile"
end
キャップ展開
今日、このエラーメッセージに遭遇し、特定の私のケースに解決策を投稿したいと考えました。私の問題は、cssファイルの1つに閉じ括弧がないため、ファイルがコンパイルされないことでした。実稼働環境向けにすべて(アセットのプリコンパイルを含む)を設定する自動化プロセスがある場合、これに気付くのは難しいかもしれません。
Herokuでこれを修正するもう1つの方法:Rakefileがコミットされ、プッシュされることを確認します。
他のすべてが失敗した後...
私の解決策は、レイアウトファイルを
= stylesheet_link_tag "reset-min", 'application'
に
= stylesheet_link_tag 'application'
そしてうまくいきました! (マニフェスト内にリセットファイルを配置できます。)
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
順調に進んでいるが、まだ運が悪いと思った場合は、touch/tmp/restart.txtまたは同等のコマンドを最後に実行してください。私は不運なリストにいましたが、今:)
おそらく、使用しているCSSにsyntax error
があります。
このコマンドを実行する
$ bundle exec rake assets:precompile Rails_ENV=development --trace
それは例外を与え、それを修正し、あなたはすべて完了です。
ありがとう