当调用sinatra本身时,$ ruby tubemp.rb
有效。但是通过rackup
它没有。应用程序,无论如何都找不到内联模板。
#config.ru
require 'rubygems'
require 'sinatra'
set :environment, ENV['RACK_ENV'].to_sym
disable :run, :reload
require './tubemp.rb'
run Sinatra::Application
返回的错误是:
No such file or directory - /home/ber/Documenten/ET_tubemp/code/views/index.erb:
tubemp.rb
get '/' do
#...
erb :index
end
__END__
@@ layout
<html>
...
<%= yield %>
@@ index
Welcome!
不知何故,通过rackup,它希望视图存在于实际的视图文件中。我想在包含左右时,rackup无法处理__END__
令牌。
除了将模板移动到模板文件之外,我应该如何处理?
答案 0 :(得分:5)
来自the docs:
源文件中定义的需要sinatra的内联模板会自动加载。如果您在其他源文件中有内联模板,请显式调用
enable :inline_templates
。
在这种情况下,当您使用rackup
时,config.ru
会调用require 'sinatra'
,而Sinatra会在该文件中查找任何模板,但找不到任何模板。当您直接运行应用程序文件时,Sinatra会在tubemp.rb
中搜索模板,然后找到它们。
要解决此问题,请添加
enable :inline_templates
到您的tubemp.rb
文件(以及任何其他具有内联模板的源文件)。