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)
我怎样才能解决这个问题?
在配置块中指定views目录的路径:
set :views, "#{settings.root}/../views"
Run Code Online (Sandbox Code Playgroud)
请参阅http://www.sinatrarb.com/configuration.html#__view_template_directory
如果不查看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)
| 归档时间: |
|
| 查看次数: |
3216 次 |
| 最近记录: |