モジュール式のsinatraアプリケーションを作成しようとしていますが、各サブアプリケーションでviews
プロジェクトのフォルダーのルートにあるディレクトリを探す必要があります。ただし、ルートではなく、サブディレクトリ自体でviewsディレクトリのみを検索します。私のプロジェクトは次のようになります。
├── config.ru
├── music_catalog
│ └── app.rb
├── public
│ ├── css
│ │ └── site.css
│ └── images
│ ├── content_top_bg.jpg
│ ├── demo_image_01.jpg
│ ├── god_save_http_it_aint_no_human_being.png
│ ├── header_bg.jpg
│ ├── home-showcase.png
│ ├── hover_link_bg.jpg
│ ├── its_little_its_blue_and_its_magical.jpeg
│ ├── linkbar_bg.jpg
│ ├── logo.png
│ ├── main_graphics.jpg
│ ├── placeholder.gif
│ ├── placeholder.jpg
│ ├── placeholder.png
│ ├── right_navbar_bg.jpg
│ └── shadow_left.jpg
└── views
├── album.haml
├── genre.haml
├── index.haml
├── layout.haml
├── login.haml
└── not_found.haml
だから私のconfig.ruで私はこれをやってみます:
require 'sinatra'
require './music_catalog/app.rb'
set :root, File.dirname(__FILE__)
# enable :run
map "/" do
run MusicCatalog
end
app.rb
内部では、次music_catalog
のようにルート変数を使用します。
require 'sinatra/base'
`# I thing I am doing this wrong`
set :views, Proc.new { File.join(root, "sites/#{site}/views") }
class MusicCatalog < Sinatra::Base
get "/" do
haml :index
end
end
しかし、ルートディレクトリから自分を引き出す代わりに、index.haml
次のようにエラーが発生します。
Errno::ENOENT at /
No such file or directory - /Users/amiterandole/Dropbox/code/rsandbox/sinatra_music_store/music_catalog/views/index.haml
使ってますruby 1.9.3p194
ビューディレクトリをルートviews
フォルダの適切な場所に設定するのを手伝ってください。