2015-06-10 1 views
4

Ситуация: У меня есть приложение для рельсов, с sidekiq, работающее очень хорошо, под debian8.Rails, Sidekiq и systemd находятся на debian 8 корабля

Мне нужен более простой контроль над моим sidekiq, поэтому вместо того, чтобы демонировать его с помощью опции -d, я хочу создать файл sidekiq.service в /etc/systemd/system/sidekiq.service. (Так что я буду в состоянии sudo systemctl restart sidekiq.service)

Я видел, как gitlab сделать на github, но это не работает для меня, потому что я использую RVM установить рубин.

Если я делаю то же самое с/path/to/rvm/bin/bundle, он возвращает мне сообщение об ошибке «Невозможно найти Gemfile». (И я также запустить gem install bundler, ранее)

я могу запустить sidekiq из другой директории, чем мои рельсы приложение с: BUNDLE_GEMFILE=/home/me/myapp/Gemfile bundle exec sidekiq --config /home/me/myapp/config/sidekiq.yml --require /home/me/myapp/config/environment.rb

Но в моем /etc/systemd/system/sidekiq.service на ExecStart линии , У меня есть ошибка: Executable path is not absolute

Любая подсказка о том, как я могу это сделать?

Или, может быть, это будет более эффективно/проще, чтобы запустить sidekiq в контейнере докера?

ответ

5

Я просто попробовал это с системой на Ubuntu 15.04. (Это также работает для Upstart на Ubuntu 14.x.) Я использую команду alias RVM для абсолютного пути для пакета. Я думаю, что это поможет также сообщить, какой каталог будет в начале, а также.

Чтобы сделать обертку/псевдоним RVM. Из каталога Rails:

rvm current      # grab gemset name 
rvm alias create NAME GEMSET_NAME 

так, если ваше имя gemset было [email protected]_app, и вы хотите, чтобы ваш обертка/псевдоним будет называться 'awesome_app', это было бы:

rvm alias create awesome_app [email protected]_app 

Тогда в Systemd, полный путь что-то вроде PATH=/usr/local/rvm/wrappers/awesome_app/ который делает команду ExecStart это:

ExecStart=/usr/local/rvm/wrappers/awesome_app/bundle exec sidekiq ... 

Edit: Я подтвердил, что мой sidekiq работник теперь работает должным образом. Вот мой полный файл sidekiq.service.

Description=Sidekiq Background Worker 

[Service] 
Type=forking 
User=rails 
Group=rails 
WorkingDirectory=/home/deployer/app 
Environment=RAILS_ENV=production 
GuessMainPID=true 
ExecStart=/usr/local/rvm/wrappers/awesome_app/bundle exec "sidekiq -d -L log/sidekiq.log -q mailer,5 -q default -e production >> log/sidekiq.log 2>&1" 
ExecStop=/usr/local/rvm/wrappers/awesome_app/bundle exec "sidekiqctl stop /home/deployer/app/tmp/pids/sidekiq.pid >> /home/deployer/app/log/sidekiq.log 2>&1" 

[Install] 
WantedBy=multi-user.target 

В настоящее время я контролирую его с помощью monit. Я лично предпочитаю Upstart, так как systemd требует пароль каждый. Один. время. но, как я уже сказал, может подтвердить, что это работает для меня.

Смежные вопросы