[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)