Capistranoでダウンロード
Capistranoにはターゲットホストにファイルを送信するメソッドと、ターゲットホストからファイルを受信するメソッドがある。具体的にはput
、upload
、get
、download
の四種類。put
とupload
はファイルの内容を送信するのと手元にあるファイルを送信するのとで違う。put
は引数にファイルの内容をとり、upload
はパス名をとる。
put "nameserver 10.0.0.1\n", "/etc/resolv.conf" upload "/path/to/resolv.conf", "/etc/resolv.conf"
ではget
とdownload
の違いは何かというと、get
がターゲットホスト群のうちの一つだけからファイルを受信するのに対し、download
はすべてからファイルを受信する。
get "/etc/debian_version", "/tmp/debian_version" download "/etc/debian_version", "/tmp/debian_version"
だが、しかし、受信したものを置く場所は同じになってしまうではないか。そう思っていた。
実はCapistranoによるコマンド実行やファイル転送の指定ではホスト名を置換する特別な記述が使えるようになっている。コマンドラインやパス名の中で$CAPISTRANO:HOST$
と書いた部分が、今まさに対象となっているホスト名で置換される。したがってdownload
は以下のように使えばおかしなことにならなくて済む。
download "/etc/debian_version", "/tmp/debian_version.$CAPISTRANO:HOST$"
コマンド実行でも同じように使えるのだが、たいていの場合は$(hostname)
などで対応できると思う。コマンド実行が少し減ってうれしいということはあるかもしれない。ただ、ここでいうホスト名とはレシピ上の名前のことで、実際のホストにどのようなノード名が設定されているかとは関係がないという点には注意が必要である。