読者です 読者をやめる 読者になる 読者になる

Motomichi Works Blog

その日学習したことについて書いている日記です。誰かの役に立ったらそれはそれで嬉しいです。

railsその0002 vagrant+rails5の環境でmodelやcontrollerのファイルを編集しても反映されない問題を解決する

参考にさせて頂いたページ

vagrantrsyncのエラーについて

vagrant + rails のときに起こる問題について

今回の環境(インストーラーなど)

ホストマシン環境

ゲストマシン環境

rsyncが無いのでMSYS2をインストールしてpacmanrsyncをインストールする

Vagrantfileの中で type: "rsync",を設定するにはrsyncをインストールする必要があり、

これまで git for windows の Git BASHvagrant を使ったりしていましたが、このままだと都合が悪いので、

表題の問題を解決するために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のあるディレクトリでいつも通り

rails s

して確認すると解決されていました。

終了するときは、

ctrl + c で rsync-auto を止めて、いつも通り vagrant halt で止めます。