2014-04-09 2 views
44

방금 ​​내 애플리케이션을 레일 4.1.0에서 4.1.rc2으로 마이그레이션했습니다. 레일 4.1에 sprockets_better_errors 보석에서 Heroku가에서 촉구 레일 테이너가 합병 한 정신 검사에 응답 내 JS 파일자산이 필터링되어 제공되지 않습니다 : add config.assets.precompile

ActionView::Template::Error: Asset filtered out and will not be served: add `config.assets.precompile += %w(my_js)` to `config/application.rb` and restart your server 
+3

에 오신 것을 환영를 추가 할 수 있습니다! 지금 실수로 태그를 만들 수 있습니다. * 항상 * 자동 완성 메뉴에서 선택하십시오! – Charles

답변

51

이러한 오류를 받기 시작했다. https://github.com/rails/sprockets-rails/pull/84

개발 모드에서 앱을 실행할 때 프로덕션 환경에서 볼 수있는 자산 파이프 라인 오류가 표시됩니다.

app/assets/javascripts/ 폴더에 JavaScript 파일을 삽입하는 대신 응용 프로그램 레이아웃에 javascript_include_tag을 사용했을 가능성이 큽니다.

app/assets/javascripts/ 폴더로 파일을 이동할 수 있습니다.

양자 택일로, 당신은 포함하도록 설정/application.rb 파일을 업데이트해야합니다

config.assets.precompile += %w(my_js) 

참고 파일 이름이의 .js 파일 확장자를 포함하지 않도록.

+42

그것은 좋은 이유가 아닙니다. 모든 사람들이 헤로 쿠를 사용하는 것은 아니며 이로 인해 실제로 문제가 발생했습니다. 개발시 사용자 정의 .js 또는 .css 파일을 사전 컴파일하지 않아도됩니다.이것이 우리가 처음 개발 모드를 갖는 이유의 일부입니다. –

+1

js 파일을 자산 파이프 라인에 다음과 같이 추가 할 수는 없습니까? // = require modernizr – JustinParker

+0

파일 확장자가 필요하지 않습니까? 'my_js'는'my_js.js'의 이름이 될까요? 매니페스트를 사용할 수 있다고 생각했습니다. 매니페스트에 그것을 나열 할 수 있다면 왜'config.assets.precompile + = % w (my_js)'를 할 것입니까? – ahnbizcad

30

응용 프로그램 레이아웃 머리글에 stylesheet_link_tag params[:controller]과 같은 것을 추가 한 경우 다른 컨트롤러에 별도의 JS 응용 프로그램이 있지만 기본 레이아웃이 동일하므로이 작업을 매우 짜증나게 할 것입니다. 빠른 방법이 극복 및하여 /config/initializers/assets.rb에 다음을 추가 할 미리 컴파일 된 모든 자산이 함께 작업 (그러나 아마 최종 솔루션을) 계속이이 같은 것을

Rails.application.config.assets.precompile += [/.*\.js/,/.*\.css/] 

.js.coffee.css.scss 일 경우, .js.css이면 충분합니다.

Rails.application.config.assets.precompile += %w(*.svg *.eot *.woff *.ttf *.gif *.png *.ico) 
Rails.application.config.assets.precompile << /\A(?!active_admin).*\.(js|css)\z/ 

그냥 위의 줄을 추가합니다 :

+0

큰 팁을 주셔서 감사합니다, 그것은 작동합니다! – Gediminas

+0

감사! 정말 좋은 솔루션입니다. 왜 스프로킷에 기본적으로 사용되지 않는지 궁금합니다. – Dimitry

+3

@ Dimitry, 프리 컴파일의 아이디어는 특정 목적에 필요한 모든 파일을 하나의 파일에 포함시키기위한 것입니다. 그래서 당신의 '최상위'파일 만이 목록에 포함되어야하며, 그들은'// = require ...'지시어를 사용하여 그들이 필요로하는 것을 포함시켜야합니다. 위의 내 솔루션은 개발에 도움이되지만,'rake assets : precompile'과 같은 일을한다면 절대 제공 할 필요가없는 파일이 엄청나게 많을 것이다. 예를 들어, 각 지시문/컨트롤러/템플릿이 별도의 파일 인 Angular 프로젝트를 사용하면 쉽게 100 개 이상의 파일을 가질 수 있습니다. – zmilojko

4

은 이상적으로 @zilojko 솔루션 작동하지만 나는 또한 다음과 같은 해결책을 발견 따라서 조금 더보고 후 ..이 응용 프로그램에 적극적으로 관리자가/설정/initializers/assets.rb

위의 코드는 활성 관리 파일을 건너 뛰는 동안 자산을 ​​사전 컴파일합니다. 그래서 그들은 두 번 또는 차례로 처리되지 않고 오류가 발생합니다.

3

예, 브라우저에서 오류를 읽고, 내가 한 모든 코드의 다음 줄을 추가했다 다음 /config/initializers/assets.rb 파일에

Rails.application.config.assets.precompile += %w(depot.css) 

를하고는했다.

+0

이것은 나에게도 효과적입니다. – Megha

0

당신은 당신의 ERB에서 <%= javascript_include_tag 'xxx' %>을 detele하고 assets/javascript/name_space/index.js.coffee에서 1,500 신뢰도 수준이

#= require ./xxx 
관련 문제