rbenvとVirtualBoxで0から作るRuby on Railsアプリ開発環境

2013年最初のエントリは、rbenvとVirtualBoxRuby on Railsアプリの開発環境を作る手順です。入門編。

簡単にきっかけなんかを書きます。

今の仕事では、Railsプロジェクト用の開発サーバ(CentOS)が存在し、そこに各メンバーがログインして、開発するスタイルをとっています。開発に使っているツールはVimSubversion、RVMあたりです。同じサーバでJenkins(CI)も動かしています。

ただ、今の環境だと、RVMを使っている利点があまり感じられないといった点が気になりだしました。そんなわけで、この機会にrbenvがどんなものか感覚をつかもうと思いました。

今回の想定環境は以下のものです。

ゴールとしては、実際のRailsアプリとしてRedmineを例にとり、Redmineが起動して、ホストOSからRedmineにアクセスできるようになるところまでを確認します。タイトルに「開発環境」とありますが、当面、素の状態のCentOSに入っているVimを想定。

OSのインストール

VirtualBoxへのCentOSのインストールは、ググれば色々出てくるので、その通りに*1

rbenvのインストール

rbenv を CentOS 6.3 にインストール」を参考にしました。

上記の参考記事にしたがえばインストールはできるのですが、今回の目標に向けて補足。

1. 今回は32bit OSなので、epelとremiリポジトリは64bit用のURLではなく32bit用のものに読み替える必要があります。
2. PostgreSQL9.2を使うため、リポジトリとして、PostgreSQL9.2用のRPMを追加しておきます*2

 # rpm -Uvh  http://yum.postgresql.org/9.2/redhat/rhel-6-i386/pgdg-centos92-9.2-6.noarch.rpm)

3. 開発に必要な各yum(postgresやopensslやreadline)も追加でインストールしておきます。Redmine公式のインストール手順が親切なので、そこに記載されているものを選びました。

 # yum install postgresql92-server postgresql92-devel openssl-devel readline-devel ImageMagick

Redmineのインストール

手順にしたがってrbenvをインストールしていれば、gitもインストールしているはずなので、git経由でインストールすることにします。

 # git clone https://github.com/redmine/redmine.git

まずは、redmine/config/database.yml.exampleをコピーして、redmine/config/database.ymlを作成します。DB名は以下のようにしました。

その後、bundlerのインストールとbundle installを行い、必要なGemをインストールします。なお、pgのインストールに失敗しないように、PostgreSQLの実行ファイルのPATHを通しておく必要があるので、bundle install前に通してます*3

 # gem install bundler --no-rdoc --no-ri
 # export PATH=$PATH:/usr/pgsql-9.2/bin
 # bundle install

続いて、データベースを初期化します。postgresユーザでinitdb。

 # su - postgres
 postgres$ initdb 

PostgreSQLを起動します。

 # service postgresql-9.2 start

後は、セットアップ系の各Rakeタスクを実行。

 # rake generate_secret_token
 # rake db:create
 # rake db:migrate

ここまでエラーがなく行っていれば、Webrickで起動してみます。

 # rails s

エラーがなければ、ホストOSからhttp://localhost:3000/にアクセスすればRedmineのホーム画面が表示されるはずです。

エラー「no such file to load -- openssl」が出る場合

最初に試した時は、このエラーが出て、「rake db:create」あたりのRakeタスクが実行できませんでした。

結果的に、Rubyを再インストールしたら解消されました。再インストールなので、当然bundle install等もやり直しです(gemはインストールしたRubyの下に入るので)。

 # rbenv uninstall 1.9.3-p374
 # rbenv install 1.9.3-p374
 # rbenv rehash

それでも失敗する場合は、以下のようにopensslやreadlineがインストールされているディレクトリをオプションで指定してインストールする必要があるかもしれないです(参考

 # CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=/usr/local" rbenv install 1.9.3-p374

ゲストOSからアクセスできるようにしてみる

VirtualBoxの設定を変更します。キーワードは「VirtualBox NAT接続 ポートフォワーディング」あたり。ヒットした結果の通りに、VirtualBoxネットワークアダプタにポートフォワーディングルールを設定します。

ちなみに、VirtualBoxのネットワークの設定を行うときは、ゲストOSをパワー・オフしておく必要があるので注意。

今回の場合、最低限以下のようにポートフォワーディングルールを定義すればOK。

[:original]

設定後ゲストOSを起動し、さらにRedmineを起動。そして、ホストOSから http://localhost:13000/ にアクセスしてみます。

ゲストOSのポート3000にフォワーディングされ、Redmineのホーム画面が表示されました。

アクセスできない場合

1. ポートフォワーディングの設定が間違ってないか確認
2. ゲストOS側のネットワークインターフェースとF/W設定を確認
切り分けのために、ゲストOS側のiptablesはとりあえず切っておきます。

 # service iptables stop

あと、eth0がdownしていればup。今の私の環境だと、起動後にeth0がupしていないので、手動でupする必要があります…。

まとめ

rbenvの導入は簡単でした。RVMはもっと苦労した記憶があります。また、RVMに比べて学習コストが低いのも利点かなと感じました。

今後のステップ

今回は手順を確認する意味で一つずつ丁寧に実行していきましたが、CapistranoやChefを組み入れて、より簡単にできるようにしたいなぁと思います。実際の環境ではWebrickを使うわけにもいかないし。

*1:ちなみに、割り当てメモリが少ない(512MB以下?)とGUIインストールができないみたいので、768MBにしました。私のマシンのメモリ(2MB)だと、これが限界…。

*2:インストールしたばかりの状態だと8.xのみしかインストールできないです。yum list | grep postgresで確認。

*3:通してない場合、pg_configがねぇよ!みたいなエラーが出てインストールに失敗します。