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


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'

젬 파일

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

7
bundle exec rake assets : precompile은 그것을 고치는 것처럼 보이지만 왜 작동하지 않습니까?
Chris Muench

10
사전 컴파일 : 나는 간부 레이크 자산 번들 실행 후에도, 생산에서 같은 문제가
루카스 르낭

답변:


313

기본적으로 Rails는 프로덕션 환경에서 파일을 사전 컴파일했다고 가정하고 프로덕션에서 라이브 컴파일 (런타임 동안 자산 컴파일)을 사용하려면 config.assets.compile을 true로 설정해야 합니다 .

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

사전 컴파일 된 자산을 사용하지만 사전 컴파일 된 파일이 누락 된 경우이 옵션을 사용하여 스프라켓으로 대체 할 수 있습니다.

경우 config.assets.compile옵션은 false로 설정하고 누락 된 파일의 이름을 나타내는 "AssetNoPrecompiledError"를 얻을 것이다 실종 미리 컴파일 된 파일이 있습니다된다.


3
:이 문서가 말씀을 시도 할 수도 devcenter.heroku.com/articles/rails31_heroku_cedar을 (난 아직 그것을 자신을 시도하지 않은)
크리스 MUENCH

7
분명히하기 위해 config.assets.compile 옵션은 config / environments / production.rb에 있습니다 (프로덕션에서 작업중인 경우). 프로덕션 환경에서 라이브 / 지연 컴파일을 수행하려면 application.rb에서 지연 컴파일을 활성화해야합니다.
avioing

34
성능 저하로 인해 런타임 컴파일을 활성화하는 것은 해결책이 아닙니다. 해결책은 자산 사전 컴파일이 발생하지 못하게하는 핵심 문제를 해결하는 것입니다.
David Tuite

5
RAILS_ENV = production bundle exec rake asset : precompile을 사용하여 자산을 사전 컴파일했습니다. 이 오류가 발생하는 이유는 무엇이며이 플래그도 설정해야합니까?
Tony

2
@Tony, application.css / js / image 파일 이외의 파일을 요청하고에 등록하지 않았기 때문입니다 application.rb. 추가 / 편집 application.rb: config.assets.precompile += %w( first.css second.js ). 이제이 파일들도 컴파일됩니다. 스프라켓에서만 사용하는 경우 모든 파일을 추가하지 말고 /require<link><script>
elado에

202

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


14
나는 이것을하는 방법을 찾는 것이 얼마나 힘든지 믿을 수 없다.
derekerdmann

3
live compile을 true로 설정하면 "더 많은 메모리를 사용하고 기본값보다 성능이 저하되므로 권장하지 않습니다." guides.rubyonrails.org/asset_pipeline.html#live-compilation
andrew.rockwell

rake -T아니면 bundle exec rake -T당신의 친구입니다.
Ryan

2
@Underworld Bundler는 루비 앱에서 gem 종속성을 관리하기위한 도구이며 Rails 3에 내장되어 있습니다. 번 들러를 사용하는 경우 실행 bundle exec rake ...하면 앱에 대한 올바른 갈퀴 및 관련 종속성을로드 할 수 있습니다. 번 들러를 사용하지 않는 경우을 실행하면 rake ...됩니다.
richardsun

3
위 명령을 실행하려면 이미 환경을 프로덕션 모드로 설정했는지 확인하거나 RAILS_ENV = production
JESii로

31

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

다른 해상도에 대해 미디어 쿼리와 다른 CSS 파일을 사용하는 경우 이것이 가장 좋은 방법입니다.
Fa11enAngel

1
모든 CSS 파일을 배열에 포함시켜야합니까? 40 개의 CSS 파일이 있으면 어떻게합니까?
yozzz

30

Capistrano 사용자를위한 빠른 해결책은이 줄을 Capfile에 넣는 것입니다

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

11

이 글을 읽는되지만으로 문제가없는 모든 사람들을 위해 application.css대신 예를 들어 자신의 사용자 정의 CSS 클래스와 admin.css, base.css

해결책은 언급 한대로 사용하는 것입니다

bundle exec rake assets:precompile

그리고 스타일 시트에서 참조를 참조하십시오. application.css

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

자산 파이프 라인은 application.css에서 모든 스타일 시트를 미리 컴파일하기 때문입니다. 이것은 개발 과정에서도 발생하므로 자산 파이프 라인을 사용할 때 다른 참조를 사용하는 것은 잘못되었습니다.


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

이것은 나를 위해 일한 유일한 솔루션이었습니다. 어쩌면 내 레일즈 버전 (3.1.3)에 문제가 있었습니까? 어쨌든 내 자산이 공개 / 자산으로 사전 컴파일되었고 파일 이름이 manifest.yml에 나열된 것과 동일한 SHA를 가졌다 고 말할 수 있습니다. 어떤 이유로 든 Rails는 이전에 설정이 항상 잘 작동했지만 더 이상 올바른 위치에서 자산을 찾지 않았습니다. 이 변경으로 해결되었습니다.
antinome

이 솔루션에 감사드립니다. 개발 모드에서 몇 가지 사항을 테스트하려고했지만 이미 사전 컴파일 된 자산이 있고 디렉토리에 public / assets / application.css가 있어도 "application.css가 사전 컴파일되지 않았습니다"라는 말에 놀랐습니다. 프로덕션 환경에서와 같이 개발 환경에서 자동으로 config.assets.manifest를 설정하지 않는 것에 놀랐습니다.
Tyler Rick

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)

2
나중에이 문제를 발견 한 사람을 명확하게 설명하기 위해 위에서 변경해야하는 코드는config/application.rb
GMA

4

빠른 수정 사항은 다음과 같습니다.

capistrano를 사용하고 있다면 이것을 deploy.rb에 추가하십시오 :

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

캡 배포


2

오늘이 오류 메시지가 표시되어 내 사건에 대한 해결책을 게시하고 싶었습니다. 내 문제는 내 CSS 파일 중 하나에 닫는 괄호가 누락되어 파일이 컴파일되지 않는 것이 었습니다. 프로덕션 환경에 대해 모든 것을 설정하는 자산 프리 컴파일을 포함하는 자동화 된 프로세스가있는 경우이를 알아 채기가 더 어려울 수 있습니다.


1

다른 모든 실패 후에 ...

내 솔루션은 레이아웃 파일을

= stylesheet_link_tag "reset-min", 'application'

= stylesheet_link_tag 'application'

그리고 효과가있었습니다! (리셋 파일을 매니페스트 안에 넣을 수 있습니다.)


1

Heroku 에서이 문제를 해결하는 또 다른 방법 : Rakefile이 커밋되고 푸시되었는지 확인하십시오.


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

0

모든 것을 잘 수행했지만 여전히 운이 좋지 않다고 생각되면 마지막에 touch tmp / restart.txt 또는 이와 동등한 것을 실행하십시오. 나는 불행한 목록에 있었지만 지금은 :)


0

아마도 syntax error사용중인 CSS에 a 가 있을 것입니다 .

이 명령을 실행

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

예외가 발생하여 수정되었으며 모두 완료되었습니다.

감사

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.