Rails
CentOS
chef
vagrant

Vagrantで構築した開発環境内でbundle installがフリーズする場合の解決策

More than 3 years have passed since last update.


1. 概要

以下の環境下でbundle installすると、途中でフリーズしてしまう現象が発生した(Installing actionviewのところでフリーズしてしまう)。


  • Mac OS X 10.9.4

  • VirtualBox 4.3.16

  • Vagrant 1.6.5

  • CentOS 6.5

  • Chef Solo 11.14.0.rc2

  • Ruby 2.1.2(rbenv)

  • Ruby on Rails 4.1.1

  • 共有フォルダ: NFS

また、BoxはVagrantbox.esに登録されている以下のものを利用した。

https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box


2. 解決策

結論からいうと、Boxを変えればよい。

例えば、Vagrant Cloudで公開されているChef公式のCentOSであれば問題なくbundle installが通った。

Box以外まったく同じ環境で、いくつかのBoxを試したが、2creative/vagrant-centosのみフリーズした(私の力不足で、詳細な原因は分からなかった……)。

当該Boxはいくつかのチュートリアル系記事でインストールすべきBoxとして取り上げられている。

もし同じような現象が発生したら、Chef公式のBoxを試してみるとよい。


3. 考えられる原因

参考までに、解決に至るまでに考えた原因について書く。


(1) rubygems.comに接続できない?(ネットワークの問題)

いくつかのGemがインストールできている時点で、ネットワークの問題ではない。


(2) Linuxのパッケージ依存の問題?

パッケージの問題であれば、その旨のエラーが出力されるはず。


(3) NFSのsynced_folderのパーミッションの問題?

NFSのパーミッション問題は検索するといくつも出てくるようで、疑ってみた。

MacでNFSを有効にすると、Vagrant内の共有フォルダのuid:gid501:20になる。

これがvagrantユーザの各IDと異なり問題が起きていると考えた。

しかしそうであれば(1)と同じく1つもGemがインストールされるはずはない。


(4) CPU/メモリが逼迫している?

十分に増やして試してみたが、現象は再現された。


(5) Boxの問題?

Boxを変えたら現象は再現されなくなった。

ただ、前述のとおり原因は不明。


4. 備考

Vagrantは現在rsyncによる共有フォルダの同期が実装されている。

しかし、これはホスト側→ゲスト側の片方向のみの同期で、pull型はまだ実装されていない。

そのため、開発に使うことはまだ現実的ではない(例えばrails gなど、ゲスト側で生成したファイルがホスト側に同期されない)。

NFSはUNIX系OS専用ということもあり、双方向rsyncによる同期が実現されればより汎用性の高い開発環境となり得る。


5. おわりに

上記現象について、原因に心当たりのある方はぜひコメントの方をよろしくお願いいたします。