Sinatra通过rackup不喜欢内联模板

ber*_*kes 7 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
Run Code Online (Sandbox Code Playgroud)

返回的错误是:

No such file or directory - /home/ber/Documenten/ET_tubemp/code/views/index.erb:
Run Code Online (Sandbox Code Playgroud)

相关部分来自 tubemp.rb

get '/' do
  #...
  erb :index
end

__END__
@@ layout
<html>
...
<%= yield %>

@@ index
Welcome!
Run Code Online (Sandbox Code Playgroud)

不知何故,通过rackup,它希望视图存在于实际的视图文件中.我想当__END__包含左右时,机架无法处理令牌.

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

mat*_*att 5

来自文档:

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

在这种情况下,当你使用rackup它是你的config.ru那个调用require 'sinatra',而Sinatra正在查找该文件中的任何模板,并且没有找到任何模板.当您直接运行您的应用程序文件时,Sinatra会搜索tubemp.rb模板并找到它们.

要修复它,请添加

enable :inline_templates
Run Code Online (Sandbox Code Playgroud)

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