Gem Sidekiq 6.0 已经取消了 daemon pid 和 logger, 作者要求使用 systemd 了

jicheng1014 · 2019年09月16日 · 最后由 jicheng1014 回复于 2019年09月17日 · 6464 次阅读

最近部署的时候,发现 capistrano-sidekiq 失败了,最后发现是 sidekiq 已经升级到了 6.0. 而默认情况下是依赖 daemon 模式的

似乎 sidekiq 作者是强调 sidekiq 应该是使用 systemd 或者 upstart 来处理这种 daemon 模式,并且认为 类似 puma 也应该这么干

capistrano-sidekiq 其实也提供了 systemd 的方式

只需要

  1. 在 deploy 中先指定 set :init_system, :systemd
  2. 在具体的业务机器中执行 loginctl enable-linger USERNAME
  3. 之后 执行 bundle exec cap sidekiq:install

于是乎 就会在 USERNAME/.config/systemd/ 中创建 sidekiq.ENV.service , 由于已经执行了 loginctl enable-linger USERNAME, 则会加载这块

这个地方 我遇到了 2 个小坑

坑 1: 生成的这个配置 service name 就是 sidekiq . 如果你跟我一样一台机器跑了其他的 sidekiq , 则需要使用 set service_unit_name 指定下特殊的名称

坑 2: 因为我服务器也使用了 rvm, 所以导致了 模板生成的 ExecStart 的路径不对 所以需要修改下 set :bundler_path

懒得折腾的同学,也可以等 capistrano-sidekiq 更新。

capistrano-sidekiq 的作者说,"最近一个星期将修复 sidekiq 6.0 的问题", 然而 14 天已经过去了.....

最后,根据 sidekiq 的作者的说法 每一个开发者都需要掌握 systemd 这种方式。而对于我来说,多了解下也不是啥坏事

当然一把梭解决问题 就是改 gemfile

gem 'sidekiq', '< 6.0'

之后 bundle update sidekiq 就啥都不用改了

部署的时候才发现升级了 sidekiq, 这个升级是不是显得太随意了?😂

bestjane 回复

都说了好久了

根据 sidekiq 的作者的说法 每一个开发者都需要掌握 systemd 这种方式

很认同哇!很多奇奇怪怪的 daemon 管理方式,都应该大一统到 systemd!

bestjane 回复

哈哈 新开的项目就没注意

需要 登录 后方可回复, 如果你还没有账号请 注册新账号