capistranoいいよね。
てか最近Railsがオワコンみたいなことが叫ばれてて、ちょっと悲しいです(´;ω;`)ウッ…
今回はCapisttranoのタスクを修正する方法を解説します。
公式にはこんな感じに書いてあるが、実際に僕がやりたかったのは、
複数ユーザーが一つのマシン内で別のデプロイをしようとした際、
gitのwrapperタスクのところでPermissionDeniedする問題を解決しようとしました。
公式のOverride方法
簡単なtaskのoverrideなら公式のとおりにやればいいだけ。
1 2 3 4 5 6 7 8 9 10 11 12 |
task :init do puts "init" end task :foo => :init do puts "foo" end Rake::Task["foo"].clear_actions #<= ここが重要。これを記入することで、Task["foo"]のoverrideが可能に。 task :foo do puts "bar" end |
clear_actionがoverrideするためにtaskを削除してくれる。
他にもclear文はこれだけあるみたい。
- clear_prerequisites
- clear_actions
- clear_comments
実際に書いたコード
実際にやろうとしたことは、手元にないTaskのoverrideなので、ちょっと工夫が必要になりました。
gitのwrapperの部分をoverrideしたいので、そこまでの継承を書く必要がありました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
namespace :git do # overrideしてスキップする desc 'Upload the git wrapper script, this script guarantees that we can script git without getting an interactive prompt' task :wrapper do Rake::Task["git:wrapper"].clear # <= clear_actionではなく clearのみを採用 on release_roles :all do unless test("[ -e #{fetch(:tmp_dir)}/#{fetch(:application)}/git-ssh.sh ]") execute :mkdir, "-p", "#{fetch(:tmp_dir)}/#{fetch(:application)}/" upload! StringIO.new("#!/bin/sh -e\nexec /usr/bin/ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no \"$@\"\n"), "#{fetch(:tmp_dir)}/#{fetch(:application)}/git-ssh.sh" execute :chmod, "+x", "#{fetch(:tmp_dir)}/#{fetch(:application)}/git-ssh.sh" end end end end |
これだけ、まあ簡単だね。
Skipしちゃうけど大丈夫?って思ったけどソースみたかんじssh設定してるだけだから、
べつに初回だけどよさそう。なので、二回目以降はスキップしちゃいました。
該当箇所のコミットも頻繁にされていない様子なので。(笑)
clearってやればいいんだよ。
簡単だね。
じゃあね〜〜〜。