使用capistrano 3在生产中运行rpush

问题描述 投票:1回答:1

为了运行Rpush,我已在config / deploy.rb中编写了此代码

 after :publishing, 'deploy:restart'

  after :finishing, 'deploy:cleanup'

  after :finished, :restart_rpush do

    on roles(:web) do
        within release_path do
            with rails_env: fetch(:rails_env) do
                execute :bundle, :exec, "rpush stop -e #{fetch(:rails_env)}"
                execute :bundle, :exec, "rpush start -e #{fetch(:rails_env)}"
            end
        end
    end
  end
end

在部署时,我收到此错误:

DEBUG [76ef4791]    * Rpush isn't running? 
/home/dev/proteqtor/releases/20150714065629/tmp/rpush.pid does not exist.

Rpush没有运行。 可能是此问题的原因?

ruby-on-rails-4 capistrano3
1个回答
2
投票

我认为这是因为,由于Rpush没有运行,因此您将获得未捕获的异常来execute :bundle, :exec, "rpush stop -e #{fetch(:rails_env)}" 。 即,为什么不运行rpush stop呢?

取而代之的是,首先测试(使用Capistrano 3的test命令 )pid文件是否存在于给定路径,并且仅在存在时才运行stop,否则运行start:

desc 'Restart rpush'
task :restart_rpush do
  on roles(:web) do
    within release_path do
      with rails_env: fetch(:rails_env) do
        if test('[ -f /path/to/my/pid/file ]')
          # Rpush is running
          execute :bundle, :exec, "rpush stop -e #{fetch(:rails_env)}"
          execute :bundle, :exec, "rpush start -e #{fetch(:rails_env)}"
        else
          # Rpush is not running
          execute :bundle, :exec, "rpush start -e #{fetch(:rails_env)}"
        end
      end
    end
  end
end

after :finished, :restart_rpush
© www.soinside.com 2019 - 2024. All rights reserved.