Итак, у меня есть плагин, который запускает Ansible для установки Discourse (я очень, очень хочу перестать использовать WordPress для приема заказов на установку!).
Изначально я вызывал fork для запуска процесса, что работало нормально при тестировании, но я подумал, что стоит сделать это более «по-дискурсовски».
Затем я создал одноразовую задачу для запуска процесса, но она завершается с ошибкой так:
Я попробовал добавить sidekiq_options queue: 'low' в класс, а затем в функцию, выполняющую задачу.
Затем я отказался от запуска процесса через задачу и просто выполнил его напрямую в модели с помощью:
Discourse::Utils.execute_command(*instructions)
Это работает отлично, если запускать из rails c, но как бы я ни запускал это (это среда разработки Ubuntu, запущенная с помощью ./bin/unicorn), процесс завершается.
Одноразовые задачи — это задачи, которые выполняются ровно один раз. Похоже, вам нужна обычная задача, которая будет запускаться по триггеру, например, при поступлении запроса к контроллеру.
Обычные задачи могут выполняться дольше 60 секунд, как это происходит в обычной работе.