我正在尝试以一种更类似于普通 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 - 没有这样的文件或目录-/home/dev/indexer/lib/views/index.erb
有问题的几行是:
get '/' do
erb :index
end
我该如何解决这个问题?
最佳答案
如果不查看 rb
文件的内容,就很难猜出哪里出了问题。如果您的路由是在应用程序根目录下的子文件夹中的 rb
文件中定义的,则必须显式设置 views
文件夹。
在你的例子中,假设 /app.rb
是设置基本配置的文件,你必须在那里。
class MyApp < Sinatra::Base
set :views, File.dirname(__FILE__) + '/views'
set :public_folder, File.dirname(__FILE__) + '/public'
end
否则 Sinatra 将在后续子文件夹中查找相关路径。此外,后续路由文件应扩展相同的类。在本例中为 MyApp。例如,在 ./lib/admin.rb
class MyApp < Sinatra::Base
get "/blah" do
"blah blah"
end
end
关于ruby - Sinatra 找不到 View 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14434061/