我正在尝试以与普通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
我该如何解决这个问题?
答案 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
类。