Да, определенно.Мы настроили delayed_job таким образом, чтобы я работал.
Для его работы есть пара требований:
- Серверы должны иметь синхронизированные часы.Обычно это не проблема, если все часовые пояса сервера установлены одинаково.
- Все серверы должны иметь доступ к одной и той же базе данных.
Чтобы сделать это, вы простоиметь одно и то же приложение на обоих (или на всех, если их более двух) серверах и запускать рабочие на любом сервере, который вы хотите обрабатывать.Любой сервер все еще может ставить в очередь задания, но только те, на которых работают работники, будут фактически обрабатывать их.
Например, у нас есть один interface
сервер, db
сервер и несколько worker
серверов.,Сервер interface
обслуживает приложение через Apache / Passenger, соединяя приложение Rails с сервером db
.workers
имеет такое же приложение, хотя Apache не работает, и вы не можете получить доступ к приложению через http.С другой стороны, у них есть работающие delayed_jobs.В обычном сценарии сервер interface
ставит в очередь задания на db
, а серверы worker
обрабатывают их.
Одно слово предостережения: если вы полагаетесь на физические файлы в своем приложении(вложения, файлы журналов, загруженный XML или что-либо еще), вам, скорее всего, понадобится решение, подобное S3, для хранения этих файлов.Причина этого заключается в том, что отдельные серверы могут не иметь реальных файлов.Примером этого является то, что если ваш пользователь должен загрузить свое изображение профиля на ваш веб-сервер, файлы, скорее всего, будут храниться на этом сервере.Если у вас есть другой сервер для изменения размера изображений профиля, изображение не будет существовать на рабочем сервере.