Sinatra找不到views目录

时间:2013-01-21 07:23:56

标签: ruby gem sinatra runtime-error

我正在尝试以与普通Ruby Gem结构更相似的方式构建我的Sinatra应用程序。我有以下文件树:

.
├── app.rb
├── config.ru
├── Gemfile
├── Gemfile.lock
├── helpers
│   ├── dbconfig.rb
│   ├── functions.rb
│   └── init.rb
├── hidden
│   └── Rakefile
├── lib
│   ├── admin.rb
│   ├── api.rb
│   ├── indexer.rb
│   ├── init.rb
│   └── magnet.rb
├── models
│   ├── init.rb
│   ├── invite.rb
│   ├── tag.rb
│   ├── torrent.rb
│   └── user.rb
├── public
│   ├── css
│   │   ├── reset.css
│   │   └── style.css
│   ├── i
│   ├── img
│   │   ├── bg.jpg
│   │   ├── dl-icon.png
│   │   ├── logo.png
│   │   ├── logo-public.png
│   │   ├── magnet-icon.png
│   │   ├── text-logo.png
│   │   ├── text-logo-public.png
│   │   └── upload-icon.png
│   └── js
│       ├── main.js
│       └── torrents.js
├── README.md
├── SPEC.md
├── tmp
│   └── restart.txt
├── TODO.md
└── views
    ├── error.erb
    ├── footer.erb
    ├── header.erb
    ├── index.erb
    ├── list.erb
    ├── nav.erb
    ├── text.erb
    └── upload.erb

我有试图在lib/中呈现内容的应用程序文件,但在(重新)启动Passenger服务器后,我得到:Errno::ENOENT - No such file or directory - /home/dev/indexer/lib/views/index.erb

令人不快的几行是:

get '/' do
  erb :index
end

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

在配置块中指定views目录的路径:

set :views, "#{settings.root}/../views"

请参阅http://www.sinatrarb.com/configuration.html#__view_template_directory

答案 1 :(得分:4)

如果不查看rb个文件的内容,就很难猜出出了什么问题。如果路由是在应用程序根目录下的子文件夹中的rb文件中定义的,则必须显式设置views文件夹。

在您的情况下,假设/app.rb是设置基本配置的文件,您必须在其中设置views(或其他类似公用文件夹)。

class MyApp < Sinatra::Base
  set :views, File.dirname(__FILE__) + '/views'
  set :public_folder, File.dirname(__FILE__) + '/public'
end

Else Sinatra将查看相关路径的后续子文件夹。此外,后续路由文件应该扩展相同的类。在这种情况下MyApp。例如,在./lib/admin.rb

class MyApp < Sinatra::Base
  get "/blah" do
    "blah blah"
  end
end

答案 2 :(得分:0)

好吧,我发现了什么问题!我需要做的就是让lib/文件夹中的类继承自Brightswipe继承的主Sinatra::Base类。