Какой самый быстрый способ для истинной синатры (ruby / rack) after_filter? - PullRequest
7 голосов
/ 05 февраля 2009

Хорошо, это простая задача. После того, как я рендерил HTML клиенту, я хочу выполнить вызов БД с информацией из запроса.

Я использую sinatra, потому что это легкая микрофреймкара, но на самом деле я готов на что угодно в ruby, если это быстрее / проще (Rack?). Я просто хочу получить URL-адрес и перенаправить клиента в другое место на основе URL-адреса.

Итак, как можно поступить с реечным / sinatra настоящим after_filter. И под after_filter я имею в виду после отправки ответа клиенту. Или это просто невозможно без нитей?

Я разветвлял sinatra и добавлял после фильтров, но нет способа сбросить ответ, даже send_data, который предполагается для потоковых файлов (который, очевидно, для двоичных файлов), ожидает after_filters.

Я видел этот вопрос: Multipart-response-in-ruby но ответ для рельсов. И я не уверен, действительно ли он сбрасывает ответ клиенту, а затем позволяет обрабатывать его позже.

Rack :: Callbacks имеет некоторые обратные вызовы до и после, но даже те, которые выглядят так, как будто они будут работать до того, как ответ будет отправлен клиенту, вот реализация Rack :: Callbacks (добавлен комментарий):

def call(env)
  @before.each {|c| c.call(env) }
  response = @app.call(env)
  @after.each {|c| c.call(env) }
  response 
  #i am guessing when this method returns then the response is sent to the client.
end

Так что я знаю, что могу вызвать фоновую задачу через оболочку с помощью rake. Но было бы неплохо не иметь слишком ... Также есть NeverBlock , но это хорошо для выполнения отдельного процесса без задержки ответа, или это все равно заставит приложение ждать в целом (я думаю, что это будет )

Я знаю, что это много, но вкратце это простой after_filter, который действительно работает после отправки ответа в ruby ​​/ sinatra / rack.

Спасибо, что прочитали или ответили на мой вопрос! : -)

1 Ответ

5 голосов
/ 06 февраля 2009

Изменен порт run_later для рельсов, чтобы сделать трюк, файл доступен здесь:

http://github.com/pmamediagroup/sinatra_run_later/tree/master

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...