【发布时间】:2018-06-15 09:54:22
【问题描述】:
我正在努力使用自定义 v2 capistrano 任务远程启动 sidekiq:
namespace :sidekiq do
desc "Start sidekiq"
task :start do
run "cd #{current_path} && bundle exec sidekiq --version"
run "cd #{current_path} && bundle exec sidekiq --environment production --daemon --config config/sidekiq.yml && echo OK"
end
end
输出:
* 2018-01-05 11:40:51 executing `sidekiq:start'
* executing "cd /home/deploy/applications/xxx/current && bundle exec sidekiq --version"
servers: ["198.58.110.211"]
[198.58.110.211] executing command
** [out :: 198.58.110.211] Sidekiq 5.0.5
** [out :: 198.58.110.211]
command finished in 1424ms
* executing "cd /home/deploy/applications/xxx/current && bundle exec sidekiq --environment production --daemon --config config/sidekiq.yml && echo OK"
servers: ["198.58.110.211"]
[198.58.110.211] executing command
** [out :: 198.58.110.211] OK
command finished in 1128ms
我可以确认我正在获取环境(rbenv & bundler 正确),如第一次运行 cmd 所示。但出乎意料的是,sidekiq 任务开始并分散到遗忘中:1)tmp/pids/sidekiq.pid 被初始化但进程不存在,2)logs/sidekiq.log 被创建但仅带有标题:
# Logfile created on 2018-01-05 11:34:09 -0300 by logger.rb/56438
如果我移除 --daemon 开关,我可以让进程完美运行,但当然 capistrano 部署任务永远不会结束,当我执行 CTRL+C 时 sidekiq 会关闭。
如果我只是 ssh 进入远程并执行命令(显然替换 current_path),它会完美运行。
我几乎尝试了所有我能想象到的东西:不使用 config.file,使用 RAILS_ENV 代替 --environment,等等。
如“&& echo OK”所示,该命令未返回错误。
Capistrano 正在使用 "/bin/bash --login -c 'cd /home/deploy/applications/microgestion/current && bundle exec sidekiq --environment production --daemon --config config/sidekiq.yml '" 据我所知运行命令。
Ruby v2.3.3、Capistrano 2.15.5、Sidekiq 5.0.5、Rails 4.0.12
【问题讨论】:
-
您的
Capfile中有set :pty, true吗? Here 是与它相关的一些问题。 -
@user3309314 是的,我设置了 default_run_options[:pty] = true。我想你已经搞定了,但问题是我很确定它的存在是因为某些事情。 . 没有变通办法?
-
尝试使用capistrano-sidekiq gem。也许会有所帮助
标签: ruby-on-rails ruby capistrano sidekiq