【问题标题】:Clockwork recipe for Capistrano 3Capistrano 3 的发条配方
【发布时间】:2014-03-18 12:51:33
【问题描述】:

我正在尝试为 Capistrano 3 编写发条配方。在查看 Sidekiq's recipe 之后,我想出了这个:

namespace :load do
  task :defaults do
    set :clockwork_default_hooks, -> { true }

    set :clockwork_pid,           -> { 'tmp/pids/clockwork.pid' }
    set :clockwork_log,           -> { "#{current_path}/log/clockwork.log" }

    set :clockwork_roles,         -> { :app }

    set :clockwork_config,        -> { 'clock.rb' }
  end
end

namespace :deploy do
  before :starting, :check_clockwork_hooks do
    invoke 'clockwork:add_default_hooks' if fetch(:clockwork_default_hooks)
  end
end

namespace :clockwork do
  def clockwork_pid_full_path
    if fetch(:clockwork_pid).start_with?('/')
      fetch(:clockwork_pid)
    else
      "#{current_path}/#{fetch(:clockwork_pid)}"
    end
  end

  task :add_default_hooks do
    after 'deploy:updated',   'clockwork:stop'
    after 'deploy:reverted',  'clockwork:stop'
    after 'deploy:published', 'clockwork:start'
  end

  desc 'Stop clockwork'
  task :stop do
    on roles fetch(:clockwork_roles) do
      if test "[ -f #{clockwork_pid_full_path} ]"
        within current_path do
          execute "kill -int $(cat #{clockwork_pid_full_path}) 2>/dev/null"
        end
      else
        execute "echo 'clockwork was not running'"
      end
    end
  end

  desc 'Start clockwork'
  task :start do
    on roles fetch(:clockwork_roles) do
      within current_path do
        with rails_env: fetch(:rails_env, 'production') do
          execute "export RAILS_ENV=$RAILS_ENV"
          execute :bundle, :exec, :clockwork, "#{fetch(:clockwork_config)} >> #{fetch(:clockwork_log)} 2>&1 &"
        end
        execute "ps -eo pid,command | grep clockwork | grep -v grep | awk '{print $1}' > #{clockwork_pid_full_path}"
      end
    end
  end

  desc 'Restart clockwork'
  task :restart do
    invoke 'clockwork:stop'
    invoke 'clockwork:start'
  end
end

但是,clockwork:start 任务仅在我删除最后的 2>&1 & 部分时才有效。如果我尝试在后台启动该进程,似乎什么也没有发生。

我做错了什么?

【问题讨论】:

  • 你成功了吗?
  • @emerak 看看答案。
  • 您是否手动创建了 pids 文件夹?
  • 老实说,我不记得了。如果它不存在,您可以创建它。

标签: ruby deployment capistrano3 clockwork


【解决方案1】:

这就是我最终的结果。我从找到的Gist 改编而来。

namespace :clockwork do
  desc "Stop clockwork"
  task :stop do
    on roles(:app) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :bundle, :exec, :clockworkd, "-c clock.rb --pid-dir=#{cw_pid_dir} --log-dir=#{cw_log_dir} --log stop"
        end
      end
    end
  end

  desc "Clockwork status"
  task :status do
    on roles(:app) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :bundle, :exec, :clockworkd, "-c clock.rb --pid-dir=#{cw_pid_dir} --log-dir=#{cw_log_dir} --log status"
        end
      end
    end
  end

  desc "Start clockwork"
  task :start do
    on roles(:app) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :bundle, :exec, :clockworkd, "-c clock.rb --pid-dir=#{cw_pid_dir} --log-dir=#{cw_log_dir} --log start"
        end
      end
    end
  end

  desc "Restart clockwork"
  task :restart do
    on roles(:app) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :bundle, :exec, :clockworkd, "-c clock.rb --pid-dir=#{cw_pid_dir} --log-dir=#{cw_log_dir} --log restart"
        end
      end
    end
  end

  def cw_log_dir
    "#{shared_path}/log"
  end

  def cw_pid_dir
    "#{shared_path}/tmp/pids"
  end

  def rails_env
    fetch(:rails_env, false) ? "RAILS_ENV=#{fetch(:rails_env)}" : ''
  end
end

【讨论】:

    【解决方案2】:

    试试这个宝石capistrano-clockwork

    这是最简单的方法,对我来说效果很好。我尝试了几个“要点”选项,但没有成功。

    您只需要更新这些文件GemfileCapifiledeploy.rb

    宝石文件:

    gem 'daemons'
    gem 'capistrano-clockwork', group: :development
    

    Capfile:

    require 'capistrano/clockwork'
    

    部署.rb:

    set :clockwork_file, "lib/name_of_your_clockwork_config.rb"
    

    记得在部署前执行bundle install ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多