[ruby-on-rails] rails 3.1.0 ActionView :: Template :: Error (application.css는 미리 컴파일되지 않았습니다)

색인 기능이있는 간단한 페이지 컨트롤러로 기본 레일 응용 프로그램을 만들었으며 페이지를로드하면 다음과 같은 결과가 나타납니다.

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'

젬 파일

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로 설정하고 자산을 사전 컴파일하면 프로덕션 성능이 향상됩니다. 이 레이크 작업으로 프리 컴파일 할 수 있습니다.

bundle exec rake assets:precompile

Capistrano를 사용하는 경우, 버전 2.8.0에는 배치시이를 처리하는 레시피가 있습니다. 자세한 내용은 Asset Pipeline Guide의 “In Production”섹션을 참조하십시오 :
http://guides.rubyonrails.org/asset_pipeline.html


답변

좋아-나는 같은 문제가 있었다. “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)