Sinatra 应用程序找不到视图目录
Posted
技术标签:
【中文标题】Sinatra 应用程序找不到视图目录【英文标题】:Sinatra application cannot find views directory 【发布时间】:2012-09-22 05:24:54 【问题描述】:我正在尝试创建一个模块化的 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
所以在我的 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
文件夹中的正确位置。
【问题讨论】:
【参考方案1】:好的,我想通了。 set :views 语句实际上应该在我的应用程序类中,如下所示:
class MusicCatalog < Sinatra::Base
**set :views, Proc.new File.join(root, "../views") **
get "/" do
haml :index
end
end
而且我之前以错误的方式加入了根。解决了这个问题。现在 sinatra 正在正确加载我的模板
【讨论】:
干得好。我只是想把我的 git hub 项目链接给你.. 恭喜以上是关于Sinatra 应用程序找不到视图目录的主要内容,如果未能解决你的问题,请参考以下文章
在Sinatra中使用Rack :: CommonLogger