A Day in the Life

2008-05-20

cap 2.x で task:task_missing を定義しよう!ヤァ!ヤァ!ヤァ!

deploy.rb に

namespace :httpd do
  task :task_missing do |name|
    run httpd_cmd + ' ' + name
  end
end

とか書いて、

$ cap httpd:configtest
$ cap httpd:restart

と自動で呼び出されて欲しいよねー、とか全国 cap 2.x 使いの10人ぐらいは思ってるはず。のを簡易ハックで実装すると deploy.rb に

require 'capistrano/recipes/deploy/strategy'

self.instance_eval do
  def find_and_execute_task(path, hooks={})
    task = find_task(path)
    if !task
      ptmp = path.split(':')
      task_missing_name = ptmp.pop
      task_missing = ptmp.push('task_missing').join(':')
      if task = find_task(task_missing)
        missing_body = task.instance_variable_get :@body
        task.instance_variable_set :@body, Proc.new { missing_body.call task_missing_name }
      end
    end

    raise NoSuchTaskError, "the task `#{path}' does not exist" if !task

    trigger(hooks[:before], task) if hooks[:before]
    result = execute_task(task)
    trigger(hooks[:after], task) if hooks[:after]

    result
  end
end

とか書くと、task_missing で指定したタスクに引数がタスク名で渡ってくるのでそこでよしなにする。BKBK...

起きる時間

最近は必ず朝6,7時に一度目が覚めてもう一度寝て8,9時に起きる。一度6,7時に目覚めたらそのまま起きた方がいいんかなー。

記事の一覧 >