2013年最初のエントリは、rbenvとVirtualBoxでRuby on Railsアプリの開発環境を作る手順です。入門編。
簡単にきっかけなんかを書きます。
今の仕事では、Railsプロジェクト用の開発サーバ(CentOS)が存在し、そこに各メンバーがログインして、開発するスタイルをとっています。開発に使っているツールはVim、Subversion、RVMあたりです。同じサーバでJenkins(CI)も動かしています。
ただ、今の環境だと、RVMを使っている利点があまり感じられないといった点が気になりだしました。そんなわけで、この機会にrbenvがどんなものか感覚をつかもうと思いました。
今回の想定環境は以下のものです。
- ホストOS: Windows XP(32bit)
- ゲストOS: CentOS 6.3(32bit)
- Ruby: 1.9.3-p374
- Rails: 3.2.11
- DB: PostgreSQL 9.2
- VirtualBox
ゴールとしては、実際の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。
設定後ゲスト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を使うわけにもいかないし。