Sinatraのapp_root
http://d.hatena.ne.jp/foosin/20090613/1244917528
start.rbにMVCの全てを詰め込む事もできるが、やはりMVCのそれぞれでファイルを分けたい。
sinatraではMVC的なファイルの配置は、ビュー以外は用意されていない。アプリケーションルート(以後 $APP_ROOTと表記)にソースを置く事ができ、ビューだけは $APP_ROOT/views が標準で使われる。
モデルやコントローラを同じディレクトリに置きたくないので、railsと同じ配置にしてみる。
$APP_ROOT/app 以下に controllers models views のディレクトリを作成。
start.rbに以下を記述。
set :views, File.dirname(__FILE__) + '/app/views'
( Dir::glob("app/controllers/*.rb") ).each do |controller|
load controller
end
( Dir::glob("app/models/*.rb") ).each do |model|
require model
end
モデルとコントローラはそれぞれ1階層しかファイルを探索しないが、個人的にモデルとコントローラは1階層でいいと思うので。俺の経験が浅いからかもだけど。
ともかく、こうすることで start.rb にはアプリ全体の設定などのみを記述して、MVCはそれぞれのファイルに書くことが出来る。
ビューのディレクトリ指定方法はsinatraのソース読んだ。ドキュメントには指定方法載ってなかったと思う。有ったら俺の阿呆。