Vagrant環境でRailsアプリをガシガシ開発していると、なぜかbundle install
が妙に遅い、もしくは途中で完全に止まってしまう現象にぶち当たって悩んでいた所、諸悪の根源はどうやらNFSの設定だった模様。
なお、bundle install
が止まっている場合、IOWaitが100%になってて、全く動作していない感じ。
対処方法
対処方法は非常に簡単。
- NFSを設定していたら、OFFにしましょう。
…って言っても、NFSをOFFにしたらRailsアプリ重くて死ぬって言うこともあると思うので、ONにしたいよね。というわけで、もう少し調べて行ったら、どうやら複数のVagrantをNFSで動かしていて、しかもIPがかぶった場合?に動作がおかしくなるっぽい。
完全に確認したわけじゃないので、これが正しいかどうかは分からないが…
- Vagrant環境には被らないIPを設定し、NFSを有効にする
これが今のところの対処法。
VagrantのNFS設定
そもそものVagrantでNFSを有効にする方法。さくっと設定するなら、こんな感じでしょう。
config.vm.synced_folder ".", "/vagrant", nfs: true
vagrant upするとrootパスワードを求められて、入力すれば自動的にNFSが設定されているはず。
# vagrant起動
$ vagrant up
# NFSの稼働状況確認
$ sudo nfsd status
nfsd service is enabled
nfsd is running (pid 2009, 8 threads)
さらに言うと、ホスト側の/etc/exports
にNFS対象ディレクトリ情報も記載されている。
# VAGRANT-BEGIN: 501 1c00c97c-5834-4a02-886d-90921fdf091e
"/Users/zaru/Sites/rails_proj" 192.168.33.17 -alldirs -mapall=501:20
# VAGRANT-END: 501 1c00c97c-5834-4a02-886d-90921fdf091e
ここまでは至って普通。
問題は、192.168.33.17
このIPが指定されている他のVagrant環境がある場合に、おかしくなると思われる。まぁ、そりゃそうなんだろうけど、気が付かぬうちにIPがかぶっていることもある。なので、別のIPをちゃんと割り当ててあげればOK。
開発環境にはなるべくIPを固定で割り当てたいんだけど、ここは真面目に手動で管理するしかないのかな…。