Capistranoで指定したユーザ権限によりファイルを作成する

Capistranoを使ってファイルをアップロードするにはputやuploadを使う。ただ、指定したユーザの権限でファイルをアップロードしたいというときにしばしばなやむことになる(……よね?)。

たとえば、特定のユーザでしかアクセスできないディレクトリにファイルを置きたいといったケース。ログインユーザでいったんファイルをどこかにput/uploadして、そのファイルをsudoでchownしてmvすることになる。

まあ、通常はそれで十分なのだけど、こんなふうに書けなくもなさそうだ。

content = "abc\ndef"
sudo "dd of=/path/to/file bs=1 count=#{content.size} 2>/dev/null",
  :data => content + "\n",
  :as => "user-name"

ただし、この方法ではモードの指定ができないからchmodは別に行う必要がある。