sifue's blog

プログラマな二児の父の日常 ポートフォリオは www.soichiro.org

CentOS5.5にRuby on Rails/PostgreSQL8.1の環境を作る

普段MacOSX Snow LeopardRuby on Railsの開発をしているのですが、開発環境から本番環境に移すためにサラのCentOS5.5に環境を立てたのでその健忘録。

  • Ruby 1.8.7のソースからのインストール

gccがそもそも入っていなかったのでgccからインストール。

$ sudo yum install gcc

その後Ruby 1.8.7をソースからインストール。

$ sudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz
$ sudo tar zxvf ruby-1.8.7.tar.gz
$ cd ruby-1.8.7
$ sudo ./configure
$ sudo make
$ sudo make install

無事、インストールが終了したら、PATHを通す。

$ cd ~/
$ vim .bash_profile

PATHに/usr/local/bin/rubyを追加しておく。:で追加するのを忘れずに。それからバージョンを確認。

$ ruby -v
ruby 1.8.7 (2008-05-31 patchlevel 0) [i686-linux]

これでOK。

  • RubyGems1.3.7をインストール

このバージョンはMacに立てている環境と同じものを用意。

$ sudo cd /usr/local/src/
$ sudo wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz
$ sudo tar zxvf rubygems-1.3.7.tgz
$ cd rubygems-1.3.7
$ sudo ruby setup.rb
$ gem -v
1.3.7

問題なくインストールでき、確認。

  • Rails2.3.8をインストール
$ sudo gem install rails -v 2.3.8

と実行すると、
no such file to load -- zlib (LoadError)
というわけで、zlibやらopensslやら足りなさそうなので、インストールしてRubyの拡張をインストール。

$ sudo yum install zlib
$ cd /usr/local/src/ruby-1.8.7/ext/zlib/
$ sudo ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
$ sudo make
$ sudo make install
$ sudo yum install openssl
$ sudo yum install openssl-devel
$ cd /usr/local/src/ruby-1.8.7/ext/openssl/
$ sudo ruby extconf.rb
$ sudo make
$ sudo make install

これで再度。

$ sudo gem install rails -v 2.3.8
$ rails -v
Rails 2.3.8

としてインストール終了。

  • PosgresSQL 8.1をインストール

あとでpgをインストールする際に必要となるので、postgresql-develも入れておく。

$ sudo yum install postgresql-server
$ sudo yum install postgresql-devel

これでOK。
細かいpostgreSQLの設定は、
http://www.crimson-snow.net/hmsvr/centos/db/postgresql.html
を参考に、ユーザー作ったり、外部からアクセスできるようにして、MacのpgAdminからの接続を確認して終了。

  • pg0.10.0をインストール
$ sudo gem install pg -- --with-pg-config=/usr/bin/pg_config
$ gem list | grep pg
pg (0.10.0)

これで、RailsでPosgreSQLが使えるようになる。

自分は、/var/www/rails/application_nameに展開。
Railsアプリケーション自体の設定は、
http://guides.rubyonrails.org/v2.3.8/
を見ながら設定。おもにconfig/database.ymlの設定をして早速実行してみる。

$ cd /var/www/rails/application_name
$ sudo rake db:create RAILS_ENV=production
$ sudo rake db:migrate RAILS_ENV=production
$ sudo ruby script/server -e production

http://hostname:3000/にアクセスしてみて動くことを確認してみる。

  • Mongrelをインストールして、Mogrelで動かしてみる。
$ sudo gem install mongrel
$ gem list|grep mongrel
mongrel (1.1.5)

インストールは完了。

$ cd /var/www/rails/application_name
$ sudo mongrel_rails start -d production -p 3000 -B

http://hostname:3000/にアクセスして動くことを確認。

$ sudo mongrel_rails stop

これで終了しておく。
ちゃんと起動できているかも

$ vim /var/www/rails/application_name/log/mongrel.log

でログを確認してみる。特にエラーがなければOK。
と思いきや。リダイレクト処理などがうまく行かない様子...。

(追記)
どうやらこのMongrel1.1.5とRails2.3.8の組み合わせにはバグが有るらしく、
https://gist.github.com/471663
でダウンロードできるmongrel.rbをRailsアプリケーションのconfig/initializer/においてあげないと正しく動かないようでした。


これで解決。詳しくは、
https://rails.lighthouseapp.com/projects/8994/tickets/4690

今回は静的ファイルが少ないのでMongrelだけで本番環境を構築します。というわけで、chkconfigに追加する方法も紹介。

$ sudo vim /etc/init.d/application_name

を編集し、

#!/bin/sh
# chkconfig: 2345 86 25
# description: application_name
#

MONGREL=/usr/local/bin/mongrel_rails
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin/ruby
APPLICATION_NAME_PATH=/var/www/rails/application_name
case "$1" in
start)
   $MONGREL start -e production -d -p 3000 -c $APPLICATION_NAME_PATH
  ;;
stop)
  $MONGREL stop -c $APPLICATION_NAME_PATH
  ;;
esac

exit 0

のようにしておく、

$ sudo chmod 755 /etc/init.d/application_name
$ sudo chkconfig --add application_name
$ sudo /sbin/chkconfig --list | grep application_name
application_name 0:off   1:off   2:on    3:on    4:on    5:on    6:off

このようにRunレベル2〜5で動くようになっていればOK。

$ sudo reboot

で再起動して、サービスが起動しているかhttp://hostname:3000/にアクセスして確認してみる。

$ vim /var/www/rails/application_name/log/mongrel.log

のログを見て問題なければOK。

以上、CentOS5.5にRuby on Rails/PostgreSQL8.1の環境を作るまでの手順でした。