2016-02-23 2 views
0

Есть ли способ обновить или изменить вид из фонового задания? Например, если пользователь хочет отправить 100 электронных писем, я хочу показать прогресс фонового задания пользователю через представление. После отправки первого сообщения показывайте 1/100, второй, 2/100 и т. Д.Rails обновляет/изменяет представление динамически при использовании фоновых заданий

Не знаю, если это имеет значение, но я использую delayed_job.

+0

Вы можете настроить вызов Ajax с компьютера вашего клиента на ваш сервер каждые X секунд, и ответ сервера на этот вызов Ajax будет состоять в том, чтобы проверить, сколько писем было отправлено и перенаправить результат в браузер клиента. – MrYoshiji

ответ

3

Если вы явно хотите, чтобы сервер будет источником обновления страницы, то вы должны смотреть в actioncable, что реализация Rails из WebSockets (части рельсов 5.0, доступны as a gem для предыдущих версий)

Принцип: Клиент подписывается на канал SendMailChannel, когда дается заказ на отправку 100 писем. Всякий раз, когда работа, выполняемая на сервере, отправляет почту, она передает эту информацию всем подписчикам через SendMailChannel. Затем вы можете использовать эту информацию в сценарии кофе для обновления страницы и отображения счетчика соответственно.

Если вы намерены обновить счетчик, это может быть немного излишним, учитывая всю конфигурацию, которая должна быть выполнена (разработка заданий + каналов + действия coffeescript для подписки и обновления +, возможно, изменение вашего сервера к резьбовому, подобному Puma).

Обновление каждые 10 секунд было бы более тяжелым и менее эффективным и универсальным, но проще реализовать.