Sinatraでviews以下のディレクトリからファイルを指定する方法
Sinatraのディレクトリ構成
/ Lmain.rb --- アプリのコントローラ Lconfig.ru --- WebアプリのフレームワークのRackの設定ファイル LGemfile --- Gemパッケージを管理する Lviews Llayout.slim --- 各ページで共通するパーツ Lindex.slim --- Topページ Lcss Lbase.sass --- 各ページで使用するスタイルシート(sass)
問題
views以下のファイル(index.slim)は簡単にアクセスができます。
※Sinatraはデフォルトでviewsディレクトリから
Viewの役目があるファイルを探します
しかし、views以下のディレクトリにあるファイルを指定したいことがあります。 views以下のファイルがslimやsassなど様々なファイルが集り、構成がわかりにくくなります。
/ Lmain.rb --- アプリのコントローラ Lconfig.ru --- WebアプリのフレームワークのRackの設定ファイル LGemfile --- Gemパッケージを管理する Lviews Llayout.slim --- 各ページで共通するパーツ Lindex.slim --- Topページ Lbase.sass --- 各ページで使用するスタイルシート(sass)
なのでslimはviewsに置き、cssなどはviews以下のディレクトリに分けます。 私の中で理想な形です。
/ Lmain.rb --- アプリのコントローラ Lconfig.ru --- WebアプリのフレームワークのRackの設定ファイル LGemfile --- Gemパッケージを管理する Lviews Llayout.slim --- 各ページで共通するパーツ Lindex.slim --- Topページ Lcss Lbase.sass --- 各ページで使用するスタイルシート(sass)
解決方法
ファイル指定時に'(シングルクォーテーション)で括ってあげることで、 views以下のディレクトリのファイルを指定することができる。 以下はsassファイルを定義している例です。
# coding:utf-8 require 'rubygems' require 'sinatra/base' require 'sinatra/reloader' require 'slim' require 'sass' class MainApp < Sinatra::Base configure :development do register Sinatra::Reloader # developmentの場合Sinatraのリロードをする end set format: :html5 # css get '/css/base.css' do sass :'css/base' # ''でファイルパスを書く views/css/base.slim end # public get '/' do slim :index # views/index.slim end
これからSinatraのエントリーが増えるかもしれません。