Blank?=False

ゆるゆる仕事したいフリーランスエンジニアの記事

実践Ruby On Railsの開発環境構築でハマった話

f:id:stonebeach-dakar:20160424222121p:plain

実践Ruby On Rails 第2章 Railsアプリケーションの土台づくりで 開発環境作成でハマったので書いていきます。

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

環境

ホストPC: MacOSX ElCapitan
Vagrant Version: 1.8.1
VisualBox Version:4.3.38

現象について

実践RubyOnRailsのサポートページでVagrantファイルをダウンロードします。
www.oiax.jp

ここでは、Users/<ユーザー名>/Develope/BaukisフォルダにVagrantFileを保存します。

Vagrant UPVMを作成

$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


f:id:stonebeach-dakar:20160515110504j:plain
共有できとらん。

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フォルダが共有される、というのが間違いなのかもしれません。
この辺は改めて調べなおしてみたいところです。