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のソース読んだ。ドキュメントには指定方法載ってなかったと思う。有ったら俺の阿呆。