Не может получить доступ к response.body внутри после блока фильтра в Sinatra 1.0

Я борюсь со странной проблемой. Согласно http://github.com/sinatra/sinatra (secion Фильтры) объект ответа доступен в после блоков фильтра в Sinatra 1.0. Однако response.status правильно доступен, я не вижу непустой response.body от своих маршрутов внутри после фильтра.

У меня есть этот rackup файл:

config.ru

require 'app'
run TestApp

Затем Sinatra 1.0.b драгоценный камень установил использование:

gem install --pre sinatra

И это - мое крошечное приложение с одиночным маршрутом:

app.rb

require 'rubygems'
require 'sinatra/base'

class TestApp < Sinatra::Base

  set :root, File.dirname(__FILE__)

  get '/test' do
    'Some response'
  end

  after do
    halt 500 if response.empty? # used 500 just for illustation
  end

end

И теперь, я хотел бы получить доступ к ответу в после фильтра. Когда я запускаю это приложение, и доступ / тестируют URL, я получил 500 ответов, как будто ответ пуст, но ответ ясно является 'Некоторым ответом'.

Наряду с моим запросом к тесту/, отдельный запрос к/favicon.ico выпущен браузером, и это возвращается 404, поскольку нет никакого маршрута, ни статического файла. Но я ожидал бы, что 500 состояний будут возвращены, поскольку ответ должен быть пустым.

В консоли я вижу, что в после фильтра, ответ на/favicon.ico - что-то как 'Не найденный', и ответ на тест / действительно пуст даже при том, что существует ответ, возвращенный маршрутом.

Что я пропускаю?

5
задан Petr Vostrel 23 March 2010 в 16:01
поделиться

1 ответ

Response.body устанавливается Sinatra: : Base # invoke, который оборачивается вокруг Sinatra :: Base # dispatch !, который, в свою очередь, вызывает фильтры. Однако #invoke устанавливает тело ответа после отправки! сделано, поэтому тело еще не поставлено. То, что вы хотите сделать, вероятно, лучше решить с помощью промежуточного программного обеспечения для стойки.

6
ответ дан 14 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: