Синатра через рэкап не любит встроенные шаблоны

Призывая саму синатру, $ 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, он ожидает, что представления будут жить в реальных файлах представлений. Я думаю, что стойка не может справиться с __END__ маркер при включении или около того.

Как мне с этим справиться, кроме как переместить мои шаблоны в файлы шаблонов?

1 ответ

Решение

Из документов:

Встроенные шаблоны, определенные в исходном файле и требующие sinatra, загружаются автоматически. Вызов enable :inline_templates явно, если у вас есть встроенные шаблоны в других исходных файлах.

В этом случае, когда вы используете rackup это твое config.ru что вызывает require 'sinatra'и Синатра ищет в этом файле какие-либо шаблоны и не находит их. Когда вы запускаете файл приложения напрямую, Sinatra выполняет поиск tubemp.rb для шаблонов и находит их.

Чтобы исправить это, добавьте

enable :inline_templates

на ваш tubemp.rb файл (и любые другие исходные файлы, которые имеют встроенные шаблоны).

Другие вопросы по тегам