2016-09-27 7 views
0

이것은 Sprockets Rack 엔드 포인트를 사용하는 Sinatra 앱입니다. HTML 페이지에서 JavaScript 파일을 참조 할 때 스크립트 파일을 HTML에 포함하는 대신 상대 경로를 사용하여 위치를 가리키고 싶습니다. 이렇게하면 디버깅이 향상됩니다.자산의 상대 경로를 반환하는 Sprockets 메서드가 있습니까?

스프라켓은 config.ru의 정의는 랙 : (이 작품을 :

map '/assets' do 
    SPROCKETS = Sprockets::Environment.new 
    SPROCKETS.append_path File.join(SPROCKETS.root, '/public/assets/js') 
    SPROCKETS.append_path File.join(SPROCKETS.root, '/public/assets/css') 
    SPROCKETS.append_path File.join(SPROCKETS.root, '/public/assets/fonts') 
    SPROCKETS.append_path File.join(SPROCKETS.root, '/public/assets') 
    SPROCKETS.paths.each{|path| puts path;} 
    SPROCKETS.js_compressor = :uglify 
    SPROCKETS.css_compressor = :scss 
    run SPROCKETS 
end 

는 HTML에서 자바 스크립트 파일을 참조하려면, 나는 다음과 같이 효과적으로 문자열로 소스를 포함하는 스크립트 태그 내에 정의 다음과 같이 내가하고 싶은 무엇)

<script><%= SPROCKETS["frontend.js.erb"].to_s %></script> 

는 독립적 인 소스로 파일 참조입니다 :

<script type="text/javascript" src="<%= SPROCKETS["frontend.js.erb"].filename %>"></script> 
스프라켓 "파일 이름"방법은 전체 경로를 반환하고 페이지가 로컬 파일 시스템을 액세스 할 수 없기 때문에

Not allowed to load local resource: file:///C:/Bitnami/rubystack-2.2.5-3/projects/myapp/public/assets/js/frontend.js.erb 

는 물론, 이런 일이 발생 :

그 옵션은 다음과 같은 메시지를 반환합니다. 필요한 것은 서버의 상대 경로를 반환하는 메서드입니다. 또 다른 머리를 때리는 순간

답변

0

좋아, ...

다음과 같이 내가 입력 한 config.ru에 바로 거기에 정의 된 표준 자산 경로를 사용 했어야 :

<script type="text/javascript" src="assets/frontend.js.erb"></script> 

작품 큰.

0

sprockets-helpers 보석을 사용해 보셨습니까? 이것은 최신 스프로킷 버전에서 작동합니다. 이 보석을 사용하면 도우미 방법을 사용하여 필요한 것을 정확하게 생성 할 수 있습니다. SASS를 사용하는 경우 sprockets-sass gem을 확인할 수도 있습니다. Sprockets 2.x와 3.x에서 훌륭하게 작동합니다.

+0

나는 둘 다 시도 할 것이다. 감사. –