Sinatra应用程序找不到视图目录

Ami*_*ole 3 ruby views sinatra

我正在尝试创建一个模块化的sinatra应用程序,并需要我的每个子应用程序来查找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
Run Code Online (Sandbox Code Playgroud)

所以在我的config.ru中我尝试这样做:

require 'sinatra'

require './music_catalog/app.rb'

set :root, File.dirname(__FILE__)


# enable :run

map "/" do
   run MusicCatalog
end
Run Code Online (Sandbox Code Playgroud)

我在app.rb里面music_catalog使用root变量,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

但是,不是从我index.haml的根目录中取出,而是错误输出:

Errno::ENOENT at /
No such file or directory - /Users/amiterandole/Dropbox/code/rsandbox/sinatra_music_store/music_catalog/views/index.haml
Run Code Online (Sandbox Code Playgroud)

我在用 ruby 1.9.3p194

请帮我将views目录设置到根views文件夹中的正确位置.

Ami*_*ole 5

好吧我明白了.set:views语句实际上应该在我的app类中,如下所示:

class MusicCatalog < Sinatra::Base

  **set :views, Proc.new { File.join(root, "../views") }**

  get "/" do
    haml :index
  end
end
Run Code Online (Sandbox Code Playgroud)

我之前也以错误的方式加入了根.修正了.现在sinatra正确加载我的模板