Windows 8.1 + VagrantでRails4開発環境を構築する
RailsはおろかRubyもほぼ開発経験なしで、そもそも無職なんですが、なぜかRails4開発案件の話が来ているため、ここ数日ほどRailsの学習/開発環境を用意したりしております。
使うもの
仮想マシン関連
- Vagrant 1.3
- 最近流行ってるらしい、VirtualBoxやらをラップした開発環境構築・管理ツール
- vagrant-vbox-snapshot
- Vagrantで作成した仮想マシンイメージのスナップショットを管理(VirtualBoxのスナップショット機能のラッパーコマンド)
- Ubuntu 12.04
Rails関連
環境構築
Chocolateyのインストール
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin - See more at: http://chocolatey.org/#sthash.9ZRAqnDV.dpuf
Vagrantのインストール
もしかしたら、VirtualBoxインストール後にいったん再起動した方がいいかもしれない。
Windows 8.1にVirtualBoxをインストールするとシャットダウンやスリープが失敗する - terurouメモというバグがあるので、Windows 8の場合はVirtualBoxはChocolateyでインストールせずに、手動インストールした方が良さそう。
cinst virtualbox
cinst vagrant
vagrant plugin install vagrant-vbox-snapshot
Windowsホスト関連ツールのインストール
iceiv+puttyとwin-sshfsは勝手にChocolateyパッケージ化した。
cinst putty-d2ddw
cinst win-sshfs
cinst HeidiSQL
ベースとなる仮想マシンイメージのダウンロード
Vagrantではベースとなる仮想マシンイメージを元に、プロジェクト固有の仮想マシンイメージを作成するという流れになる。とりあえずここでは、ほぼ真っ新に近いUbuntu 12.04イメージを使う。
vagrant box add ubuntu12_04 http://files.vagrantup.com/precise64.box
ちなみにこのイメージは一度ローカルにダウンロードしてしまえば使いまわしが可能。
仮想マシンの作成+初期設定
rbenvをシステムワイドにインストールするケースの手順。
まずは仮想マシンの作成から。
mkdir foo cd foo vagrant init ubuntu12_04
これだけで仮想マシンが作成される。続けて仮想マシンの設定を変更する。Vagrantfileを適当なエディタで開いて、以下を追加する。
config.vm.network :forwarded_port, guest: 3000, host: 3000 config.vm.provider :virtualbox do |vb| vb.customize [ "modifyvm", :id, "--memory", "1024", ] end
これで仮想メモリを1GBに変更して、VirtualBoxのhost only adapterのNATテーブルRailsのhttpdポートを解放したことになる。続けて、仮想マシンを立ち上げる。
vagrant up
仮想マシンが立ち上がったら、PuTTYで仮想マシンに接続する。
- host : 127.0.0.1
- port : 2222
- user : vagrant
- 秘密鍵 : %UserProfile%\.vagrant.d\insecure_private_key(puttygenでPuTTY用の鍵に変換しておく)
SSH接続できたら、メモリを増設したので、念のためスワップを追加しておく。
sudo dd if=/dev/zero of=/swap bs=1M count=1024 sudo chmod 0600 /swap sudo mkswap /swap sudo swapon /swap
インストール済みのパッケージも更新しておく。
sudo apt-get update sudo apt-get upgrade
apt-getでインストール可能なツール群をインストール。
sudo apt-get install build-essential sqlite3 libsqlite3-dev mysql-server git
追記: MySQLドライバが不足してた。
sudo apt-get install libmysql-ruby libmysqlclient-dev
sudoの設定変更。
sudo visudo -f /etc/sudoers.d/base
Defaults !secure_path Defaults env_keep += "PATH RBENV_ROOT"
この時点でシェルの再起動が必要かも。
rbenvのインストール。
cd /opt/rbenv sudo mkdir plugins cd plugins sudo git clone https://github.com/sstephenson/ruby-build.git
環境変数の登録。
sudo nano /etc/profile.d/rbenv.sh
export RBENV_ROOT="/opt/rbenv" export PATH="$RBENV_ROOT/bin:$PATH" eval "$(rbenv init -)"
rbenvの初期セットアップ。
sudo /opt/rbenv/rbenv init -
パスを登録したので、ここでシェルの再起動が必要になるはず。
rbenv内にRuby 2.0.0-p247をインストール。
sudo rbenv install 2.0.0-p247
デフォルトのRubyランタイムバージョンを2.0.0に変更。
sudo rbenv global 2.0.0-p247
rbenvで正常に切り替わったか確認。
ruby -v
which gem
2.0.0-p247にうまく切り替わってなければ、シェルを再起動してみてから確認する。
最後にBundlerのインストール。
sudo gem install bundler --no-rdoc --no-ri sudo rbenv rehash
Railsプロジェクトの作成
mkdir foo cd foo bundle init nano Gemfile
Gemfileに以下を追加。
gem "rails", '~> 4.0.0'
追加したら、以下のコマンドでRailsのgemをインストール。
bundle install --path vendor/bundle
Railsプロジェクトの作成。途中でGemfileを上書きして良いか確認されるので、上書きする。
bundle exec rails new .
httpd起動。
bundle exec rails s
httpd起動時に
`autodetect': Could not find a JavaScript runtime.
のようなメッセージが表示されて起動に失敗した場合(というか失敗すると思う)は、Gemfileに以下を追加してから bundle install してから、もう一回httpdを起動する。
gem 'execjs' gem 'therubyracer'
Windows側から http://127.0.0.1:3000/ にアクセスできれば、とりあえずOK。
win-sshfsとHeidiSQLの接続確認
win-sshfs
タスクトレイにwin-sshfsが常駐しているはずなので、右クリック→Show Managerして、以下のように設定。
- Host : 127.0.0.1
- Port : 2222
- Username : vagrant
- Authentication method : PrivateKey
- PrivateKey : %UserProfile%\.vagrant.d\insecure_private_key