akishin999の日記

調べた事などを書いて行きます。

rails-dev-box を使ってみる

Rails 本体の開発環境(Ubuntu)をコマンド一発で作成できる rails-dev-box を使ってみました。

rails/rails-dev-box GitHub
https://github.com/rails/rails-dev-box

Rails 本体用開発環境のようですが、普通に Rails アプリケーションの開発にも便利に使えそうです。
以下、ローカル環境(Windows)に Ruby、Git は入っているものとします。

Vagrant のセットアップ

rails-dev-box は Vagrant を使用するので、まずは Vagrant からセットアップします。

VagrantVirtualBoxコマンドラインから操作するツールです。
VirtualBox が未導入の場合は下記よりダウンロードしてインストールする必要があります。

Downloads - Oracle VM VirtualBox
https://www.virtualbox.org/wiki/Downloads

VirtualBox の用意が出来たら gem で vagrant をインストールします。

>gem install vagrant --no-rdoc --no-ri

これで Vagrant の準備は完了ですが、ここでは以下のように Vagrant 用のディレクトリを作成し、以降はその下で作業を進めました。

>md C:\Users\akishin\vagrant
>cd C:\Users\akishin\vagrant

rails-dev-box のセットアップ

準備ができたので、rails-dev-box のセットアップをします。
といっても GitHub から clone して通常の Box と同様に vagrant up するだけです。

>git clone https://github.com/rails/rails-dev-box.git
>cd rails-dev-box
>vagrant up

実行するとベースとなる Linux の Box イメージをダウンロードする所からやってくれます。

仮想機が起動してくるまで待つのは通常の Vagrant と同じですが、仮想機の作成後に Puppet を使用して RubyMySQLPostgreSQL などをインストールしてくれるので、その分それなりに時間がかかりました。
なので、実行するのは余裕のある時にしておいた方が無難です。

また、ローカル環境の問題なのか、サーバ側のリソースの問題なのか、Box のダウンロードが上手く行かず失敗してしまうことがありました。

仕方がないのでコンソールに表示されていた URL (http://files.vagrantup.com/precise32.box) より手動でイメージファイルをダウンロードし、以下のように手動で box を追加しました。
その後、再度 vagrant up したところどうやら上手く行ったようです。

>vagrant box add precise32 precise32.box
>vagrant up

もし同じ現象が起きた場合は試してみてください。

仮想機が起動したら vagrant sshSSH 接続します・・・と言いたい所ですが、Windows の場合は以下のように SSH 接続情報が表示されるだけなので、TeraTerm などのクライアントを使って手動で接続する必要があります。

C:\Users\akishin\vagrant\rails-dev-box>vagrant ssh
`vagrant ssh` isn't available on the Windows platform. You are still able
to SSH into the virtual machine if you get a Windows SSH client (such as
PuTTY). The authentication information is shown below:

Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: C:/Users/akishin/.vagrant.d/insecure_private_key

表示されている Private key を使ってもいいですが、パスワードを使用してのログインも可能です。
ちなみにパスワードも「vagrant」です。

ログインしてしまえば Rails の開発に必要なものがいろいろとインストールされている以外は普通の Ubuntu のようです。
Rails 自体はインストールされていないので、ここで入れておきます。

$ sudo gem install rails --no-rdoc --no-ri

ホストで clone した rails-dev-box ディレクトリがゲストの /vagrant にマウントされているので、ここで Rails アプリケーションを作成しておけばホスト側で直接ファイルを編集することができます。

ここでは試しに以下のように Rails アプリケーションを作成し起動してみます。

$ cd /vagrant
$ rails new exampleapp
$ cd exampleapp/
$ rails s

Rails アプリケーションが起動したらゲスト内ではなくホスト側のブラウザで localhost:3000 へアクセスしてみます。

rails-dev-box では仮想機内の ポート 3000 がホストのポート 3000 へフォワーディングされるので、ゲスト側でサーバを起動後はホスト側のブラウザで localhost:3000 にアクセスすることでアプリケーションを確認することができるようになっています。

一旦セットアップしてしまえば後はホスト側だけの操作である程度開発は完結しそうですね。


ちなみに手元の環境で、何故か Rails で bundle install が走った際に native extension のインストールがことごとくエラーになることがありました。

よくよくログなどを読んでみるとどうやら vagrant up 時の Puppet がエラーでコケて必要なソフトウェアがインストールされていない模様。
試しに一旦 vagrant halt で仮想機を停止し、再度 vagrant up したところ、もう一度 Puppet が走って今度は無事いろいろとインストールしてくれました。

結局なぜ初回エラーになったのかは原因不明のままですが・・・。


上記のように私の環境では途中いくつかよく分からないエラーに見舞われましたが、それにしても Rails の開発環境がコマンド一発でここまで整うのは便利だと思います。

Vagrant の操作コマンド

rails-dev-box を使う上で知っておくと便利な Vagrant の主なコマンドを以下にまとめてみました。

コマンド 意味
vagrant box add Box を追加
vagrant reload Vagrantfile をリロードする
vagrant status ゲストのステータスを確認
vagrant up ゲストを起動
vagrant halt ゲストを停止
vagrant destroy ゲストを破棄
vagrant suspend ゲストを一時停止
vagrant resume ゲストを再開
vagrant ssh ゲストに SSH 接続する。Windows では接続情報のみ表示して終了
vagrant package Box を作成する

参考

rails-dev-box で rails の開発をする術 - HsbtDiary(2012-12-28)
http://www.hsbt.org/diary/20121228.html#p01

Rails-Dev-Boxでらくらく開発環境自動構築 - miyohideの日記
http://d.hatena.ne.jp/miyohide/20120827/1346078299