[Grunt & Yeoman] grunt-rsync で開発サーバへ deploy する
ローカルの vagrant 仮想マシンへデプロイしてみます。
準備
rsync のたびにパスワードを求められるとつらいので、ssh config の設定をしておきましょう。
インストール
% npm install grunt-rsync --save-dev
Gruntfile
rsyncwrapper というパッケージに依存しているようで、オプションの書き方などはこれに準拠するよう。
公式と下記を参考に記述してみます。
# grunt-rsync
rsync:
options:
compareMode: 'checksum'
recursive: true
# exclude: ['.git*']
dryrun:
options:
src: '<%= dir.dest %>/'
dest: '/var/www/foo'
host: 'default'
delete: true
dryRun: true
deploy:
options:
src: '<%= dir.dest %>/'
dest: '/var/www/foo'
host: 'default'
delete: true
まず dryrun を実行してみます。
作成されるフォルダやファイルの一覧と、実行されるコマンドを確認できます。
% grunt rsync:dryrun
Running "rsync:dryrun" (rsync) task
rsyncing dist/ >>> /var/www/foo
building file list ... done
created directory /var/www/foo
./
index.html
:
sent 4727 bytes received 734 bytes 10922.00 bytes/sec
total size is 8377163 speedup is 1534.00
Shell command was: rsync dist/ default:/var/www/foo --rsh ssh --recursive --delete --dry-run --verbose --checksum
OK
Done, without errors.
実行します。
% grunt rsync:deploy
Running "rsync:deploy" (rsync) task
rsyncing dist/ >>> /var/www/foo
Shell command was: rsync dist/ default:/var/www/foo --rsh ssh --recursive --delete --checksum
OK
Done, without errors.
無事完了しました。
なお、このタイミングでエラーが起きた場合は、表示されたコマンドを確認しつつ、ターミナルから試してみると良さそうです。
% rsync dist/ default:/vaar/www/foo --rsh ssh --recursive --delete --verbose --checksum
building file list ... done
rsync: mkdir "/vaar/www/foo" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(576) [receiver=3.0.6]
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /SourceCache/rsync/rsync-42/rsync/io.c(452) [sender=2.6.9]
上記の例では、存在しないパス(/vaar)を指定していました。