実践Ruby On Railsの開発環境構築でハマった話
実践Ruby On Rails 第2章 Railsアプリケーションの土台づくりで 開発環境作成でハマったので書いていきます。
実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング
- 作者: 黒田努
- 出版社/メーカー: インプレスジャパン
- 発売日: 2014/05/23
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
環境
ホストPC: MacOSX ElCapitan
Vagrant Version: 1.8.1
VisualBox Version:4.3.38
現象について
実践RubyOnRailsのサポートページでVagrantファイルをダウンロードします。
www.oiax.jp
ここでは、Users/<ユーザー名>/Develope/BaukisフォルダにVagrantFileを保存します。
Vagrant UP
でVMを作成
$vagrant UP
すると、マウントでエラーが発生
kernel-develもインストールを失敗している模様
Building the main Guest Additions module[FAILED] <中略> Doing non-kernel setup of the Guest Additions[ OK ] <中略> Failed to mount folders in Linux guest. This is usually because the "vboxsf" file system is not available. Please verify that the guest additions are properly installed in the guest and can work properly. The command attempted was: mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant The error output from the last command was: /sbin/mount.vboxsf: mounting failed with the error: No such device
書籍では、ソースコードをVMとホストで共有して開発するのですが、
マウントエラーが発生しているため共有できません。
マウントエラー解決
マウントエラーの解決のため、ググると情報が見つかりました。
ここを参考に、kernel-develをインストールしてkernelをビルドし直す
qiita.com
$vagrant ssh
$sudo yum install -y http://bay.uchicago.edu/centos-vault/6.5/updates/x86_64/Packages/kernel-devel-2.6.32-431.3.1.el6.x86_64.rpm
$sudo yum install -y kernel-devel kernel-headers dkms gcc gcc-c+
Vagrant reloadでロードし直す。
provisionもここで実行されるようになります。
$ vagrant reload
・・・が・・・駄目っ・・・
これで、マウントエラーのメッセージが出なくなったので
ちゃんと共有できているかを確認します。
vagrant ssh
でログインして、共有フォルダに簡単なテキストファイルを作って確認して見ます。
$vagrant ssh
[VM側]
[vagrant@vagrant-centos65 ~]$ pwd /home/vagrant [vagrant@vagrant-centos65 ~]$ echo "HelloServer" >> text.txt
exitでVMを抜けてホスト側でtext.txtがあれば、共有できているということになるのですが・・・
[ホスト側]
$pwd /Users/<ユーザー名>/Develope/Baukis $ls Vagrantfile provision
共有できとらん。
VagrantはデフォルトでVM側の/vagrant
ディレクトリとホスト側のVagrantFile
があるディレクトリが
共有されるようになっているはずなんだけど何故かできていない。
ここで、大分ハマりました。
共有設定で解決
結局、Vagrantファイルに共有フォルダ設定を入れることで解決しました。
Vagrant Fileのconfig.vm~
が大量に並ぶところで、config.vm.synced_folder
の設定を追加します。
Vagrant.configure("2") do |config| config.vm.box = "centos6.5.3" config.vm.box_url = "https://github.com/2creatives/vagrant-centos/" + "releases/download/v6.5.3/centos65-x86_64-20140116.box" <中略> config.vm.synced_folder "/Users/<ユーザー名>/Develope/baukis/Src", "/home/vagrant/baukis", owner: "vagrant", group: "vagrant", mount_options: ["dmode=777", "fmode=777"]
ホスト側の/Develope/baukis/SrcフォルダをVM側の/home/vagrant/baukis
フォルダに
マウントすることで共有するようにします。
この設定は以下を参考にさせていただきました。
qiita.com
そして、再度確認します。
[VM側]
[vagrant@vagrant-centos65 ~]$ pwd /home/vagrant/baukis [vagrant@vagrant-centos65 ~]$ echo "HelloServer" >> text.txt
[ホスト側]
$pwd /Users/<ユーザー名>/Develope/Baukis/Src $ls text.txt
というわけで解決。
根本的な原因はそもそも/vagrant
フォルダが共有される、というのが間違いなのかもしれません。
この辺は改めて調べなおしてみたいところです。