Windows
vagrant

Vagrant - rsyncでファイルを同期する(Windows)

More than 1 year has passed since last update.

その前に、Vagrantとは何か?

Vagrant入門 ~導入/配布/設定/プラグインの使い方~に記載しました。

Vagrantでrsyncを使う理由

Webシステムの開発でVagrantを使う場合において、テスト環境の仮想マシンへのデプロイにSynced Folderを使うと便利であったが、いくつかの欠点… 例えば、アクセス速度が遅い、パーミッションが変更できないなどの問題があった。

rsyncでファイルを同期すれば、パフォーマンスが向上し、パーミッションも変更できるようになる。

Vagranfileの設定

rsyncではない、フォルダ共有の場合

Vagrantfile
config.vm.synced_folder "./src", "/srv/website"

rsyncで同期する

上記の設定にtype: "rsync"を追加する。同期しないフォルダはrsync__exclude: [".git/"]のように追加する。

設定例

Vagrantfile
config.vm.synced_folder "./src", "/srv/website", type: "rsync", rsync__exclude: [".git/", ".idea/"]

設定はこれで終わり。

ただ、このまま実行すると、rsyncが見つからないとのエラーが出る場合があります。
その場合はCygwinなどをインストールして利用する。

次、rsyncを使えるようにするための手順。

Cygwinとrsyncをインストール

Cygwinをrsync付きでインストールする際は、下の画像のようにSelect Packageの画面でNet > rsyncを選択する。

cygwin_rsync.png

binフォルダにパスを通す。デフォルトではここC:\cygwin\bin

再起動する。

Vagrant upを実行する

vagrant upvagrant reloadを実行すると、次のエラーが出た。

rsync: change_dir "/c/path/to/project" failed: No such file or directory (2)

/cがローカルディスクCを参照していないためだと思われる。
参照させるため、シンボリックリンクを作成する。

Cygwinでシンボリックリンクを作成

Cygwinを起動し、次のコマンドで/cがローカルディスクCを参照するようにする。

$ cd /
$ ln -s /cygdrive/c c
lrwxrwxrwx  1 Daichi None     11 6月   3 22:03 c -> /cygdrive/c

再度、Vagrant upを実行する

vagrant upvagrant reloadを実行する

今度は成功。
ゲストOSで同期されたディレクトリを確認する。

$ ls -l
drwxr-xr-x 7 vagrant vagrant 4096 Jun  3 12:50 project_name

このように、所有者とグループはvagrantになる。

vagrant起動中に同期を実行する

vagrant rsync-autoコマンドを使います。

vagrant rsync-auto
==> default: Doing an initial rsync...
==> default: Rsyncing folder: /c/path/to/project/ => /srv/website
==> default: Watching: C:/path/to/project/

これでファイルの監視状態になり、ホストOSで更新したファイルは自動的にゲストOSに同期されます。

参考にしたサイト