参考にさせて頂いたページ
vagrantのrsyncのエラーについて
vagrant + rails のときに起こる問題について
vagrant_1.8.4を使用していたときのこと
このときの環境(インストーラーなど)
ホストマシン環境
- Windows10
- vagrant_1.8.4.msi
- VirtualBox-5.0.24-108355-Win.exe
ゲストマシン環境
- CentOS release 6.7 (Final)
rsyncが無いのでMSYS2をインストールしてpacmanでrsyncをインストールする
Vagrantfileの中で type: "rsync",
を設定するにはrsyncをインストールする必要があり、
これまで git for windows の Git BASH で vagrant を使ったりしていましたが、このままだと都合が悪いので、
表題の問題を解決するためにMSYS2をインストールしたり以下のことをしました。
MSYS2については別途「Windows10にmsys2をインストールして使ってみる - Motomichi Works Blog」に今回の件以外のことも含めて書きました。
Vagrantfileのconfig.vm.synced_folderの設定をする
例として以下の通りですが、同期するディレクトリのパスはご自分の環境に合わせて読み替えてください。
config.vm.synced_folder "./my_app", "/var/www/rails_project/my_app", type: "rsync", rsync__args: %w(--verbose --archive --delete -z --copy-links --times), rsync__exclude: %w(.git/ log/ tmp/ vendor/)
vagrant upしてみるとエラー
以下のようなエラーが出ました。同期せずに止まっているようなので仮想環境内のディレクトリには何もありません。
There was an error when attempting to rsync a synced folder. Please inspect the error message below for more info. Host path: /c/Users/motomichi/Desktop/all/git_repos_all/github/MotomichiWorks/rails_practice_0001/my_app/ Guest path: /var/www/rails_project/my_app Command: "rsync" "--verbose" "--archive" "--delete" "-z" "--copy-links" "--times" "--chmod=ugo=rwX" "--no-perms" "--no-owner" "--no-group" "--rsync-path" "sudo rsync" "-e" "ssh -p 2222 -o ControlMaster=auto -o ControlPath=C:/Users/Public/Documents/Wondershare/CreatorTemp/ssh.926 -o ControlPersist=10m -o StrictHostKeyChecking=no -o IdentitiesOnly=true -o UserKnownHostsFile=/dev/null -i 'C:/Users/motomichi/.vagrant.d/boxes/centos67box-20170505/0/virtualbox/vagrant_private_key'" "--exclude" ".vagrant/" "--exclude" ".git/" "--exclude" "log/" "--exclude" "tmp/" "--exclude" "vendor/" "/c/Users/motomichi/Desktop/all/git_repos_all/github/MotomichiWorks/rails_practice_0001/my_app/" "vagrant@127.0.0.1:/var/www/rails_project/my_app" Error: This rsync lacks old-style --compress due to its external zlib. Try -zz. Continuing without compression. Warning: Permanently added '[127.0.0.1]:2222' (RSA) to the list of known hosts. mux_client_request_session: read from master failed: Connection reset by peer Failed to connect to new control master rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.2]
これに関しては、「VirtualBox - ローカルとvargrentをrsyncしたくvagrantfileを編集したところ、vagrant up中に以下のエラーメッセージが発生しました。何が原因かアドバイスを頂けないでしょうか?(36200)|teratail」を参考にさせて頂いて解決しました。
私の環境では以下のファイルを編集しました。
C:\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.8.4\plugins\synced_folders\rsync\helper.rb
以下の3行をコメントアウトしました。
"-o ControlMaster=auto " + "-o ControlPath=#{controlpath} " + "-o ControlPersist=10m " +
念のためいつでも元に戻せるようにしておくのが良さそうですね。
ホストマシンのmodelやcontrollerを編集しても仮想環境内に反映されない問題を解決する
まず vagrant reload をすると仮想環境内に同期はされるようになりました。
まだこれだけではrailsサーバーを一度止めてから、rails sしなおさないと編集内容が反映されません。
「Rails developmentモードなのにコードの変更が反映されない – KeruuWeb」を参考にさせて頂いて解決しました。
vagrant reload
をしたあとで、一度以下を実行します。
vagrant rsync
次に以下を実行するとリアルタイムに同期されるようになります。
vagrant rsync-auto
このウィンドウはそのままにして、別ウィンドウでMSYS2を起動して、
vagrant ssh
rails s
して確認すると解決されていました。
終了するときは、
ctrl + c で rsync-auto を止めて、いつも通り vagrant halt で止めます。
vagrant_1.9.7を使用していたときのこと
このときの環境(インストーラーなど)
ホストマシン環境
- Windows10 Home
- vagrant_1.9.7_x86_64.msi
- VirtualBox-5.1.26-117224-Win.exe
ゲストマシン環境
rsync-autoしたけど同期できないときのメッセージ
おおよそはvagrant_1.8.4を使用していたときと同じような手順を実行して、rsync-autoを実行しました。
$ vagrant rsync-auto
以下のように表示されました。
==> default: Not syncing C:/Users/motomichi/Desktop/all/git_repos_all/github/MotomichiWorks/rails_practice_0001/my_app as it is not part of the current workin g directory. ==> default: Doing an initial rsync... ==> default: Rsyncing folder: /cygdrive/c/Users/motomichi/Desktop/all/git_repos_all/github/MotomichiWorks/rails_practice_0001/ => /vagrant ==> default: Watching: C:/Users/motomichi/Desktop/all/git_repos_all/github/MotomichiWorks/rails_practice_0001 ==> default: Rsyncing folder: /cygdrive/c/Users/motomichi/Desktop/all/git_repos_all/github/MotomichiWorks/rails_practice_0001/ => /vagrant
以前どうだったか覚えていないのですが、任意で指定したパスはNot syncingと表示されてしまい同期されませんでした。
rsync-autoで同期できない問題を回避
任意でディレクトリ指定するのを諦めて、デフォルトの.と/vagrantだけ指定することにして、シンボリックリンクを作成しました。
Vagrantfileを以下のように記述しました。
config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync__args: %w(--verbose --archive --delete -z --copy-links --times), rsync__exclude: %w(.git/ log/ tmp/ vendor/)
私の場合のディレクトリパスでいうと以下のようにコマンドを実行しました。
まず仮想環境内に残っていたファイルを削除します。
$ vagrant ssh $ su (パスワード入力)vagrant # cd /var/www/rails_project/ # rm -rf my_app/ exit
シンボリックリンクを作成します。
$ ln -s /vagrant/my_app
仮想環境内でここまでやったら、以下のコマンドを実行します。
$ vagrant rsync $ vagrant rsync-auto