ruby-on-rails – Rails,Sidekiq和systemd都在debian 8上
情况:我有一个rails应用程序,sidekiq,工作得很好,在debian8下.
我希望更轻松地控制我的sidekiq,所以我不想使用-d选项守护它,而是想在/etc/systemd/system/sidekiq.service中创建一个sidekiq.service文件. 我看到gitlab在github上做了什么,但它对我不起作用,因为我使用rvm来安装ruby. 如果我对/ path / to / rvm / bin / bundle做同样的事情,它会返回一个错误“无法找到Gemfile”. (我之前也运行过gem install bundler) 我可以从另一个目录启动sidekiq,而不是我的rails应用程序: 但是在我的ExecStart行的/etc/systemd/system/sidekiq.service中,我有一个错误:可执行路径不是绝对的 关于我怎么做的任何线索? 或者,在docker容器中运行sidekiq可能会更高效/更简单吗? 解决方法
我刚刚在Ubuntu 15.04上尝试使用systemd. (这也适用于Ubuntu 14.x上的Upstart.)我使用RVM的alias命令作为bundle的绝对路径.我认为它也有助于告诉它一开始就在哪个目录中.
制作RVM包装器/别名.从Rails目录: rvm current # grab gemset name rvm alias create NAME GEMSET_NAME 所以,如果您的宝石集名称是ruby-2.2.2@awesome_app,并且您希望您的包装器/别名被称为’awesome_app’,那么它将是: rvm alias create awesome_app ruby-2.2.2@awesome_app 然后在systemd中,完整路径类似于PATH = /usr/local/rvm / wrappers / awesome_app /,这使得ExecStart命令成为: ExecStart=/usr/local/rvm/wrappers/awesome_app/bundle exec sidekiq ... 编辑:我已经确认我的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每个都需要密码.单.时间.但是,就像我说的那样,可以证实这对我有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |