У меня есть сервер с apache + пассажиром.
Как я буду запускать sidekiq
в процессе производства? Любая конфигурация, необходимая для запуска
bundle exec sidekiq
Спасибо
У меня есть сервер с apache + пассажиром.
Как я буду запускать sidekiq
в процессе производства? Любая конфигурация, необходимая для запуска
bundle exec sidekiq
Спасибо
bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production
-d
, процесс Daemonize
-L
, путь к записываемому файлу журнала
-C
, путь к файлу конфигурации YAML
-e
, прикладная среда
Вы можете запустить Sidekiq в качестве фонового процесса (daemon), передав аргумент -d при его запуске:
bundle exec sidekiq -d
.
Хотя этот ответ должен работать для вас сейчас, помните, что , если процесс sidekiq аварийно завершает работу, по какой-либо причине процесс должен быть перезагружен вручную. Хорошим стартовым местом для поиска более надежных способов запуска sidekiq в производстве является: https://github.com/mperham/sidekiq/wiki/Deployment
Лучшим решением, чем использование флага daemonization -d, является использование супервизора процесса, предоставляемого вашей ОС. Это также рекомендация, предоставленная вики-сайтом sidekiq:
Я настоятельно рекомендую людям не использовать флаг -d, а вместо этого использовать диспетчер процессов, такой как systemd или upstart, для управления Sidekiq (или любым другим демоном сервера). Это гарантирует, что Sidekiq будет немедленно перезагружен, если он по какой-то причине сработает.
В wiki приводятся примеры файлов конфигурации для upstart и systemd, найденных в "examples" каталоге репо.
Примечание На моем сервере CentOS 7 я использую rvm (Ruby Version Manger). Мне пришлось выполнить дополнительный шаг, чтобы гарантировать, что мой systemd script (/etc/systemd/system/sidekiq.service) может надежно запустить и остановить sidekiq, даже в том случае, когда мои пути ruby и/или gemset меняются в будущем, Наиболее важной директивой является "ExecStart", которая выглядит следующим образом в моем script:
ExecStart=/usr/local/rvm/wrappers/surveil/bundler exec sidekiq -e production -L log/sidekiq.log -C config/sidekiq.yml
Часть пути "/usr/local/rvm/wrappers/surveillanceil" на самом деле является символической ссылкой, которую я воссоздаю при помощи 'rvm alias ' во время развертывания, чтобы гарантировать, что он всегда указывает на рубиновую версию приложения и gemset, оба из которых могут существенно измениться с одного развертывания на другое. Это достигается путем создания задачи rake, которая выполняется во время развертывания и имеет эквивалент следующего:
rvm alias delete surveil
rvm alias create surveil ruby-#{new_ruby_version}@#{new_gemset_name}
Установив этот псевдоним/символическую ссылку во время развертывания, я могу спокойно оставить systemd script нетронутым, и он будет работать нормально. Это связано с тем, что путь "/usr/local/rvm/wrappers/surveillance/bundler" всегда указывает на правильную версию связки и, таким образом, извлекает из магии связки, которая заставляет ее задачи запускаться в окружении Ruby/gem, настроенной на приложение.