2016-09-27 14 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内のJavaScriptファイルを参照するには、私は次のように効果的に文字列として源を含むスクリプトタグ内に定義します(これは動作します私がやりたい何か)

<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 gemを試してみましたか?これは最新のスプロケットバージョンで動作します。その宝石はヘルパーメソッドを使用して、必要なものを正確に生成することを可能にします。 SASSを使用している場合は、sprockets-sass gemもチェックできます。 Sprockets 2.xと3.xでうまくいきます。

+0

私は両方を試してみます。ありがとう。 –

関連する問題