Sinatra找不到视图目录

tek*_*agi 5 ruby gem runtime-error sinatra

我正在尝试以一种类似于常规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
Run Code Online (Sandbox Code Playgroud)

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

令人反感的几行内容是:

get '/' do
  erb :index
end
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

NAR*_*KOZ 5

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

set :views, "#{settings.root}/../views"
Run Code Online (Sandbox Code Playgroud)

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


ch4*_*d4n 5

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

在您的情况下,假设/app.rb文件设置了基本配置,则必须在其中进行设置views(或其他任何操作,例如公用文件夹)。

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

其他的Sinatra会寻找后续子文件夹的相关路径。此外,后续的路由文件应扩展相同的类。在这种情况下为MyApp。例如,在./lib/admin.rb

class MyApp < Sinatra::Base
  get "/blah" do
    "blah blah"
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 如果您在第一个文件中需要子类化,则无需在随后的文件中表达子类。 (2认同)