Sinatra の configure で書く必要がないかも知れない項目
小さい規模で WEB Application を書く場合において、Sinatra
はサイコーに便利です。
ビューのあるアプリの場合はだいたいこういうディレクトリ構成にしますよね。
$ tree ore_tachi_no ore_tachi_no ├── config.ru ├── lib │ └── ore_tachi_no │ └── application.rb ├── public │ ├── css │ │ └── application.min.css │ └── js │ └── application.min.js └── views ├── index.slim └── layout.slim 6 directories, 6 files
application.rb の内容
/
へのアクセスで index.slim
を表示させるだけのカンタンなアプリですね。
require 'sinatra/base' require 'slim' module OreTachiNo class Application < Sinatra::Base configure do app_root = File.dirname(__FILE__) + '/../..' set :public_folder, app_root + '/public' set :views, app_root + '/views' end get '/' do slim :index end end end
Sinatra
をお使いの皆さんにおかれましては、こいつの configure
に違和感を覚えませんか?
application.rb の内容(改)
実は余計な記述がありました。
ので削ります。こうなりました。
require 'sinatra/base' require 'slim' module OreTachiNo class Application < Sinatra::Base configure do set :root, File.dirname(__FILE__) + '/../..' end get '/' do slim :index end end end
わがままなあなたのために diff を貼りますね。
diff --git a/lib/ore_tachi_no/application.rb b/lib/ore_tachi_no/application.rb index 28852eb..bf9ca17 100644 --- a/lib/ore_tachi_no/application.rb +++ b/lib/ore_tachi_no/application.rb @@ -4,9 +4,7 @@ require 'slim' module OreTachiNo class Application < Sinatra::Base configure do - app_root = File.dirname(__FILE__) + '/../..' - set :public_folder, app_root + '/public' - set :views, app_root + '/views' + set :root, File.dirname(__FILE__) + '/../..' end get '/' do
どういうこと?
set :root, [directory path]
が設定されていない場合は、configure
の記述があるファイルのディレクトリをルートディレクトリとして扱います。
ルートディレクトリは、settings.root
で参照出来ます。
そして、Sinatra
の設定の views
, public_folder
はそれぞれ settings.root + '/views'
, settings.root + '/public'
がデフォルトです。
それぞれ settings.views
, settings.public_folder
で参照出来ます。
つまり、
- アプリケーションのトップレベルのディレクトリに、
views
,public
という名前でテンプレートと静的ファイルを設置する場合は、set :root
でディレクトリを設定しておくだけでいい settings.root
直下 以外に置く場合や、views
,public
以外の名称のディレクトリに設置したい場合はこの限りではない
ということです。