Edited at

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

More than 5 years have 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に同期されます。


参考にしたサイト