2017-03-29 10 views
2

찾을 수있는 많은 잠재적 인 솔루션을 시도했으며 지금까지 아무 것도 작동하지 않았습니다. .js 파일의 코드가 실행되고 있지 않거나 클라이언트 브라우저의 아무 곳에 나 나타나지 않습니다. 머리 부분이컨트롤러 고유의 javascript 파일을 Rails (5+)에로드 할 수 없습니다.

application.html.erb 하중 :

<%= csrf_meta_tags %> 
<%= stylesheet_link_tag "application", params[:controller], media: "all" %> 
<%= javascript_include_tag "application", params[:controller] %> 

설정/초기화/assets.rb

%w( articles password_resets sessions static_pages users).each do |controller| 
    Rails.application.config.assets.precompile += ["#{controller}.js.coffee", "#{controller}.css"] 
end 

는 [컨트롤러 이름은 여기]

$(document).ready(function() { 
    alert('My controller'); 
}); 
된 .js

브라우저에서 위의 모든 내용이 그대로 유지되면 '[컨트롤러 이름] .self.longstringhere.j라는 애셋이 있습니다. s? body = 1 '입니다. 이 코드는 다음과 같습니다.

(function() { 


}).call(this); 

... 내 프로젝트에는 아무 것도 없습니다. 해당 컨트롤러에서 페이지를로드하려고 할 때 assets.rb에서 컨트롤러를 제거하면 [예상대로] 오류가 발생합니다. 응용 프로그램 레이아웃에서 항목을 제거하면 브라우저의 자산 [ 'controller] .self.js'파일이 [예상대로] 누락되었습니다. 그러나 컨트롤러의 js 파일이 누락되어 있는지 여부에 관계없이 오류가 발생하지 않으며 브라우저의 애셋에 '[컨트롤러] .self.js'가 포함되지 않습니다. 그것은 app/assets/javascripts에있는 파일이 완전히 무시되고 "스텁 아웃"된 것과 같습니다.

참고 : 나는 특별히 '// = require_tree'가 없습니다. 및 '* = require_tree.' application.js/.css 파일에서 특별히 지침 here을 따르고 있습니다. 이는 의도적 인 것입니다.

터보 링크의 모든 참고 자료 (예 : 보석, 자산 등)를 삭제 했으므로이 문제와 관련된 사악한 일이 발생할 수 있습니다.

나는 또한 서버를 다시 시작하고 자산을 미리 컴파일했으며이 작업과 몇 가지 다른 의식적인 작업을 여러 번 수행했습니다.

기록을 위해 assets.rb의 "# {controller} .js.coffee"도 '.js'로 변경하여 사용하지 않았습니다. 그러나 나는 이것이 어쨌든 필요하지 않다는 것을 읽었다.

이 문제는 모든 컨트롤러에서 발생합니다.

도움 주셔서 감사합니다.

I 새로운 레일 비계를 이용하여 동일한 절차를 따랐다 (그러나 컴파일 저작물 (posts.js)가 구체적 assets.rb의 이름으로 발생한 것을 보장하는)와 같은 문제가 돌출 만든 [EDIT] 브라우저의 posts.blahblah.js 파일에있는 동일한 자바 스크립트 "스텁"코드를 포함하여 위에서 설명한대로.

+0

컨트롤러 이름과 js/css 파일 이름이 같아야합니다. 컨트롤러 이름이'rooms_controller.rb' 인 경우 js는'rooms.coffee 또는 room.js 등 ... '이어야합니다. – ashvin

+0

좋은 측정을 위해 컨트롤러의 자산 이름을 직접 하드 코딩 해 보았습니다. (항상 서비스 재시작 등을 기억하십시오.) – vicmorrowshead

답변

0

파일 이름이 [controller-name-here].js이고 js not coffee를 사용하고 있습니다.

그러나 커피 파일을 config/initializers/assets.rb 파일에 추가하고 있습니다. 그래서 파일을 제대로 컴파일 할 수 없습니다. 아래처럼 config/initializers/assets.rb 파일을 변경하십시오 : 다른

%w( articles password_resets sessions static_pages users).each do |controller| 
    Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"] 
end 

모든 것이 잘 보인다.

+0

이것은 내 첫 번째 생각 중 하나 였고 도움이되지 못했습니다. 나는 좋은 측정을 위해 다시 시도했다. 어느 쪽이든,이 http://guides.rubyonrails.org/asset_pipeline.html#controller-specific-assets에 따르면, 사전 컴파일은 css와 coffeescript에만 필요합니다. 이 하나가 나를 잘 잡았다. 다시 말하지만 .js 자산은 내 코드가 아닌 내 주석에서 언급 한 것처럼 "스텁"으로 브라우저에 표시됩니다. 나는 rake tmp : cache : clear도 시도했다. – vicmorrowshead

+0

문제는 커피 스크립트입니다. 나는 그것을 사용하지 않고있다. 나는 그것에 대한 모든 언급을 제거했다 (보석 제외). Coffeescript는 사전 컴파일 할 때 controller-name.js로 해석됩니다. 이로 인해 동일한 이름의 파일이 무시됩니다. 이름을 변경하고 이에 따라 모든 것을 업데이트하면 올바르게 작동합니다. 그러나, 나는 coffeescript를 제거 할 수 없다. 일단 보석을 지우면 모든 것이 실패합니다 (레일스 자산 : 프리 컴파일 -> 'LoadError :이 파일을로드 할 수 없습니다 - coffee_script', 페이지 중 하나에 -> '이 파일을로드 할 수 없습니다 - coffee_script'등). 캐시를 지우고 다른 것을 찾을 수 있습니다. – vicmorrowshead

+0

확장명이 .coffee 인 파일이 있으면이 오류가 발생합니다. – Mike