なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Windows + Vagrant + Rails の比較的快適な環境を作る

Windows で Ruby on Rails の開発環境を作るメモです。
正確には、作った上でそれを快適にするまでのメモです。


環境

ホスト
・ Windows 8.1
・ Virtual Box 5.0.0
・ Vagrant 1.7.4

ゲスト
・ CentOS 6.5

基本的な構築はこちらの記事が分かり易いので、それを参考に。

【Windows7】VirtualBox + Vagrant + Ruby + Rails4 開発環境の構築【初心者必見】 - Qiitaqiita.com

上の記事とほぼ同じ設定として進めていきます。

基本的にはこのままでもなんの問題もないのですが、
Rails Server がめちゃくちゃ重いです。
さすがに我慢の限界だったので、とりあえず改善していきます。

[Vagrant Rails 遅い]で検索をかけると、NFS を使おうという記事がヒットします。
しかしながら、Windows で NFS は使えないとのことなので、別の方法を探ります。

んで見つかったのが rsync を使うというもの。

VagrantFile を編集します。

config.vm.synced_folder ".", "/vagrant", type:"rsync", rsync__exclude: [".git/"]

rsync__excludeには同期対象外のディレクトリとか指定しておきます。
すでに.vagrant/は追加されているので、書く必要はない。

なお、Windows には rsync コマンドは存在しないので、cygwin から導入しておきます。
このとき、cygwin のインストールした場所へ PATH を通しておくこと。

PATH を通したら次はシンボリックリンクを作成します。
cygwin Terminal から

cd /
ln -s /cygdrive/c

としておきます。
そしてvagrant upで起動し、vagrant rsync-autoで自動で同期してくれます。

ハマった

上のまますんなり行くこともあるのですが、私の場合はいくつかエラーが出て死にました。

UndefinedConversionError

C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.4/lib/vagrant/util/io.rb:32:in 'encode': "\x83\xE3" from Windows-31J to UTF-8 (Encoding::UndefinedConversionError)

日本語関連のエラーっぽい。
しかしながら、ディレクトリ名にもファイル名にも日本語文字を使った覚えがないし、
何故出ているのかわからない。

とりあえずの対策として、io.rb の 32 行目を書き換えた。

data << io.readpartial(READ_CHUNK_SIZE).force_encoding("UTF-8")

これで正常に動く。

ArgumentError

C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.4/plugins/providers/virtualbox/driver/base.rb:387:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)

コンソールを SJIS にすれば治ると聴いたけど、もともと SJIS だった。
これもしかたがないので握りつぶす。

r.stdout.force_encoding('ASCII-8BIT').gsub("\r\n", "\n")

これで正常に動くようになった。
ちなみに PC 再起動した後スクリプトを戻しても動いたので、本当に意味がわからない。