2017-03-04 3 views
0

SinatraをWebフレームワーク、HAMLをページに使用すると、レイアウトファイルが/views/layout.hamlになります。私も/publicにjavascriptとcssファイルがあります。Sinatraでレイアウトパスが動作しない

%script{:type => "text/javascript", :src => "test.js"} 
%link{:rel => "stylesheet", :type => "text/css", :href => "test.css"} 

私はシナトラで定義された基本的なルートを持っている場合は、すべてが正常に動作します:レイアウトスクリプトやCSSはこれに似て定義されています内

get '/' do 
    haml :index 
end 

しかしルートは、このような 'のように複数の部分を有する場合/ route/1 'の場合、突然パスがtest.jstest.cssになりません。 hamlファイルは正しくロードされますが、レイアウト内のパスはもはや有効ではありません。

いくつか試した後、パスを"//public/test.js"のように変更した場合、"test.js"ではなく... /route/1だけがロードされます。残念ながら、最初のルート/はロードされなくなりました。

Sinatraではどのようにこのようなルートで処理されますか?

答えて

1

あなたのURLが絶対的であることを確認する必要があります。

:src => "test.js"とすると、ブラウザは現在のURLであるに対して、を要求します。ルートの場合、/の場合、リクエストは/test.jsになり、動作しますが、現在のページが/route/1の場合、リクエストは/route/test.jsになり、失敗します。

%script{:type => "text/javascript", :src => url("/test.js")} 

このようになります:url helper

%script{:type => "text/javascript", :src => "/test.js"} 

より堅牢なソリューションを使用することです:

直接修正がちょうど絶対パスを作るために、URLに/を追加することですあなたのアプリケーションはあなたのウェブサーバのルート以外のどこかにマウントされていても動作します。

関連する問題