質問: 現在Sinatraを使用してWebアプリケーションを開発しています。 テンプレートファイルはデフォルトの`views`においているのですが、ファイル数が多くなってしまう為、views以下にディレクトリを作り、`erb :'admin/login'`という使い方をしていました。(この場合views/admin/login.erbが使われる) また、viewsの直下にlayout.erbが置いてあり、そのファイルheadで``としてあり、public/css以下にstyle.cssが置いてあります。 ところが、Webアプリを起動し、admin/loginにアクセスするとCSSは当っておらず、admin/css/style.cssを見に行ってしまっているようです。 これを、public/css/style.cssを見に行かせるようにすることはできないでしょうか。 (ちなみにviews/の直下に置いてあるファイルからは正常にcssが当っています) 回答よろしくお願いいたします。
回答: 相対パスそのままなので、ディレクトリの階層が違っていれば、同じレイアウトをそのまま使ってもうまくいくことはありません。解決方法は三つぐらいです。 1. 階層ごとにレイアウトを分ける。 レイアウトを分けて`"../css/style.css"`というパスにすれば一応はうまくいきます。 2. 絶対パスにする。 ``ではなく``などとします。myappの部分はアプリケーションのルートです。パスを固定化するか、何らかの形で設定に持たせるかなどの工夫が必要になります。 3. Asset Pipelineを使う。 RailsやMiddlemanと同じようにAsset Pipelineを使います。ただ、sprockets-helperを使うなどちょっと使い方に注意する必要があるようです。 参考: SinatraでAsset Pipelineするならsinatra-asset-pipelineが便利