Rails 2.3: Немедленное перенаправление перед выполнением after_filter - PullRequest
1 голос
/ 02 сентября 2011

Это в Rails 2.3.10 и Ruby 1.8.

У меня есть код, который выглядит примерно так:

class RedirectingController
  after_filter :do_something_long, :only => [:show]
  def show
    redirect_to "http://www.google.com"
  end

  def do_something_long
    sleep 60
    logger.debug("Something long has completed")
  end
end

Теперь моя проблема в том, что, хотя я вижу в журналах, что перенаправление выполнено, он ждет, пока не завершится сон 60, прежде чем фактически произойдет перенаправление. Есть ли способ, чтобы я мог отправить перенаправление в браузер, а затем запустить do_something_long. В качестве примечания я стараюсь избегать использования чего-то вроде delayed_job или resque.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Вы можете сделать что-то вроде этого:

def do_something_long
  Thread.new do
    sleep 60
    logger.debug("Something long has completed")
  end
end

См. Как асинхронно запускать очень маленький объем кода?

0 голосов
/ 02 сентября 2011

Что-то вроде delayed_job или resque предназначено для запуска и завершения длительных фоновых задач, вместо того, чтобы заставлять пользователя ждать его завершения (и замораживать пользовательский интерфейс).Сколько времени займет задание?Если это завершится в миллисекундах, то большинство людей, вероятно, даже не заметят, но если это займет больше времени, чем вы должны копаться в delayed_job.У вас есть веская причина или зависание, почему вы не можете?

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