Какой самый быстрый способ для настоящего sinatra (ruby / rack) after_filter?

StackOverflow https://stackoverflow.com/questions/513491

Вопрос

Ладно, это простая задача.После того, как я визуализирую html клиенту, я хочу выполнить вызов базы данных с информацией из запроса.

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

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

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

Я видел этот вопрос: Составной ответ на ruby но ответ - за rails.И я не уверен, действительно ли он сбрасывает ответ клиенту, а затем допускает последующую обработку.

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.Но было бы неплохо и этого не делать...Также есть Никогда не блокируй но хорошо ли это для выполнения отдельного процесса без задержки ответа или это все равно заставит приложение ждать целиком (я думаю, так и было бы)?

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

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

Это было полезно?

Решение

Изменен порт run_later для rails, чтобы добиться желаемого, файл доступен здесь:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top