Sinatra通过rackup不喜欢内联模板

时间:2013-03-26 14:46:34

标签: templates sinatra rackup

当调用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__令牌。

除了将模板移动到模板文件之外,我应该如何处理?

1 个答案:

答案 0 :(得分:5)

来自the docs

  

源文件中定义的需要sinatra的内联模板会自动加载。如果您在其他源文件中有内联模板,请显式调用enable :inline_templates

在这种情况下,当您使用rackup时,config.ru会调用require 'sinatra',而Sinatra会在该文件中查找任何模板,但找不到任何模板。当您直接运行应用程序文件时,Sinatra会在tubemp.rb中搜索模板,然后找到它们。

要解决此问题,请添加

enable :inline_templates

到您的tubemp.rb文件(以及任何其他具有内联模板的源文件)。