Возвращать ответ с Ruby CGI до завершения скрипта? - PullRequest
3 голосов
/ 16 ноября 2010

Кто-нибудь знает, как отправить ответ CGI в Ruby до завершения выполнения скрипта CGI?

Я создаю HTTP-API «забей и забудь». Я хочу, чтобы клиент передавал мне данные через HTTP и получал ответ успешно, а , а затем обрабатывает данные и выполняет некоторую обработку (без ожидания ответа клиентом).

Я пробовал несколько вещей, которые не работают, включая форк. Следующее будет просто ждать 5 секунд при вызове через HTTP.

#!/usr/bin/ruby

require 'cgi'

cgi = CGI.new
cgi.out "text/plain" do
  "1"
end

pid = fork
if pid
  # parent
  Process.detach pid
else
  # child
  sleep 5 
end

1 Ответ

3 голосов
/ 16 ноября 2010

Я ответил на свой вопрос.Оказывается, мне просто нужно закрыть $ stdin, $ stdout и $ stderr в дочернем процессе:

#!/usr/bin/ruby

require 'cgi'

cgi = CGI.new
cgi.out "text/plain" do
  "1"
end

pid = fork
if pid
  # parent
  Process.detach pid
else
  # child
  $stdin.close
  $stdout.close
  $stderr.close
  sleep 5 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...