1

私は Capistrano 3 用のクロックワークのレシピを書こうとしています

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 &バックグラウンドでプロセスを開始しようとしても、何も起こらないようです。

私は何を間違っていますか?

4

2 に答える 2

1

この宝石capistrano-clockwork を試してみてください。

それは私にとって非常にうまくいった最も簡単な方法です。「要点」のいくつかのオプションを試しましたが、成功しませんでした。

Gemfileこのファイルを更新するだけで済みCapifileますdeploy.rb

Gemfile:

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

キャップファイル:

require 'capistrano/clockwork'

deploy.rb:

set :clockwork_file, "lib/name_of_your_clockwork_config.rb"

bundle installデプロイする前に必ず実行してください;)

于 2015-11-25T19:42:48.457 に答える