281

インデックス機能を備えた単純なページコントローラーを使用して基本的なレールアプリを作成し、ページをロードすると次のようになります。

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
4

14 に答える 14

313

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

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

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

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

于 2011-09-02T01:18:49.380 に答える
202

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

bundle exec rake assets:precompile

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

于 2011-09-10T01:43:57.823 に答える
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 \;
于 2012-04-18T20:32:34.617 に答える
30

capistrano ユーザーの簡単な修正は、この行を Capfile に追加することです。

# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'
于 2011-11-21T17:15:04.247 に答える
11

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

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

bundle exec rake assets:precompile

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

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

アセット パイプラインは、application.css 内のすべてのスタイルシートをプリコンパイルするためです。これは開発中にも発生するため、アセット パイプラインを使用する場合、他の参照を使用することは正しくありません。

于 2012-12-29T19:08:39.983 に答える
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
于 2011-12-16T13:40:28.717 に答える
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)
于 2013-01-11T00:57:17.823 に答える
4

簡単な修正は次のとおりです。

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

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

キャップデプロイ

于 2011-11-17T18:18:13.067 に答える
3

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

于 2011-12-07T18:28:55.820 に答える
1

やっぱり失敗…。

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

= stylesheet_link_tag "reset-min", 'application'

= stylesheet_link_tag 'application'

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

于 2012-09-17T00:16:38.873 に答える
0

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

このコマンドを実行します

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

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

ありがとう

于 2015-05-18T11:38:00.327 に答える
0

すべてをうまく行ったが、それでも運が悪かったと思われる場合は、最後に touch tmp/restart.txt または同等のものを実行してください。私は不運なリストに載っていましたが、今では:)

于 2013-02-07T06:47:50.403 に答える
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
于 2012-04-23T10:36:11.790 に答える