Internationalize Rails3 app on CentOS 5.6

Railsi18n の仕組みを独自で持っているらしいんだけどそれを使うために準備が必要なのでまとめ。 gettext でいう po にあたる file を生成してくれる i18n_generators ってのを使う。

先頭が # の command を root で、 > の command をそれ以外の user で打つ。まず必要な gem の install 。

  1. # gem install i18n_generators

準備終了。実際に使うには app の Gemfile に追加する。

  1. > cd appname
  2. > echo "gem 'i18n_generators'" >> Gemfile
  3. > bundle check
  4. > rails generate i18n ja

これで Rails が標準で出力する error message やなんかと model の column 名の表示が日本語化される。訳がアレなときは config/locales 以下の file をいじればいいみたい。あーあと model は rake db:migrate したあとじゃないと翻訳後の file もつくられないみたいなので注意。

Deploying Rails3 app with passenger on CentOS 5.6

Rails app を本番環境で動かすには今は passenger が自然な選択肢らしく導入してみた。例によって先頭に # がある command を root で、 > がある command をそれ以外の user で打つ。

まず Apache の install から。

  1. # yum install httpd
  2. # chkconfig httpd on

次、 passenger の install 。

  1. # yum install httpd-devel curl-devel
    • make に必要な package の install 。うちの場合これで足りたけど make の段階で package が足りない場合は必要なものを教えてくれるのでそのときに install するほうがいいかも。
  2. # gem install passenger
  3. # passenger-install-apache2-module

終わると最後に httpd.conf に設定を追加しろと言ってくるのでそのとおりにする。うちの場合以下の 3 行だった。

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7
PassengerRuby /usr/local/bin/ruby

設定の最後。 Apache の document root を Rails app にする。あー app を "/var/www/rails/appname/" に deploy する場合ね。

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/rails/appname/public
    <Directory /var/www/rails/appname/public>
        AllowOverride all
        Options -MultiViews
    </Directory>
</VirtualHost>

Apacheapache という user で Rails app に access する。ので起動できるようにするために何とかしてやらないといけないんだけどそのための group を追加する方向で解決する。安直に "rails" て名前にして Rails app 全般をこの group で起動するようにしてみる。

  1. # groupadd rails
  2. # usermod -G rails apache

次、 app を deploy する場所を作る。

  1. # cd /var/www/
  2. # mkdir rails

実際の app を deploy する。

  1. # cd appname
  2. # git checkout-index -a -f --prefix=/var/www/rails/appname/
    • よく言われるけど prefix の最後の "/" は必須というかないと残念なことになるので注意。
  3. # cd /var/www/rails/
  4. # mkdir appname/log
  5. # touch production.log
    • log file はないとダメだろー。
  6. # mkdir appname/tmp
    • tmp がないと動かない場合もあるらしいのでつくっとく。
  7. # chown -R user:rails appname
    • apacheaccess できるように group を rails にする。あと細かい調整ができるように所有権を一般の user にしてるけどここで調整するよりは開発環境で変更してから deploy しなおすのが筋がいい。 root でいじって大損害を回避するための設定ってことにしといたほうがいいかな。

最後、 database を初期化する。

  1. > rake db:migrate RAILS_ENV=production
  2. > rake db:setup RAILS_ENV=production
    • seed data 投入。必要な場合のみ。

これで終了。満を持して Apache を起動する。

  1. # /etc/init.d/httpd start

Using MySQL as Rails3 database on CentOS 5.6

Rails3 で MySQL を使う場合の設定。ついこの間 stable release の最新である 3.0.7 の default adapter である mysql2 gem を使うことができなくなってしまったみたいなので mysql-ruby で代用する。

ちなみに Rails 3.1 は edge で使えるらしいのでそのうち release されて mysql2 を adapter として使うこともできるようになるんだろうけど、間が悪い。これは mysql2 gem がせっかちさんということでいいのかな。

以下、 adapter 変更も含めた MySQL を使う app の初期設定の流れ。先頭が # の command は root で、 > はそれ以外の user で打つ。

まず mysql-ruby adapter の install から。めんどくさいので root で直接 gem 叩いて system に install しちゃうけど Bundler 使うのでもおk。

  1. # yum install mysql-devel
  2. # gem install mysql-ruby

次、実際の app の adapter を変更するところまで。

  1. > rails new appname -d mysql
    • MySQL を使うよう Rails に指示して app を作成する。
  2. > cd appname
  3. > sed -i -e 's/mysql2/mysql/' Gemfile
    • Gemfile に mysql2 でなく mysql-ruby を利用すると書く。
  4. > sed -i -e 's/mysql2/mysql/g' config/database.yml
    • database 接続のための設定も mysql2 の代わりに mysql-ruby を利用するということにする。
  5. > bundle check

これで MySQL につなぐことができるはず。

最後に MySQL に接続する user を変更する。 root のまま access するのはいろいろ危ない。以下 "appname" という user で "password" という password を使って接続する例。 先に database と user だけ手動で作ってしまう。先頭が $ の command は mysql client で打ち込む SQL ね。

  1. > mysql -u root -p
  2. $ CREATE DATABASE appname_development;
  3. $ CREATE DATABASE appname_test;
  4. $ CREATE DATABASE appname_production;
  5. $ GRANT ALL ON appname_development.* TO appname@localhost IDENTIFIED BY 'password';
  6. $ GRANT ALL ON appname_test.* TO appname@localhost IDENTIFIED BY 'password';
  7. $ GRANT ALL ON appname_production.* TO appname@localhost IDENTIFIED BY 'password';
  8. $ quit
  9. > sed -i -e 's/root/appname/g' config/database.yml
    • "appname" という user で MySQL につなぐ設定
  10. > sed -i -e '/password:/s/:/: password/g' config/database.yml
    • "password" という password を使ってねという設定

終了。

Using jQuery with Rails3 on CentOS 5.6

Rails 3.0.7 は default で prototype を使うんだけど jQuery を使うように変更する手順のまとめ。ちなみに Rails 3.1 は jQuery が default になるらしいのでそのうちこの手順もいらない子になる。あとなんか使う gem が Rails3 だと jquery-rails 、 Rails2 だと jrails らしい。

先頭が # の command は root で、 > の command はそれ以外の user で打つ。

まず必要な gem の install から。

  1. # gem install jquery-rails

appname という名前の実際の app の設定は以下。

  1. > rails new appname
  2. > cd appname
  3. > echo "gem 'jquery-rails'" >> Gemfile
    • Gemfile に使う gem を指定する。
  4. > bundle check
  5. > rails generate jquery:intall
    • prototype を消して jQuery を install 。
  6. > sed -i -e '/javascript/s/%w()/%w(jquery.min rails)/'
    • jQuery が読み込まれるように link 要素を追加する設定。

これで終了。

Beginning Ruby on Rails3 on CentOS 5.6

RoR3 をはじめる準備としてとりあえず以下をやっておけばおk。

で、 Rails 自体の install は root で以下の command を打てば終了する。

これだけじゃあれなので、 app を作るときの初期手順をまとめておこう。

  1. > rails new appname
    • appname が app の名前。
  2. > cd appname
  3. > bundle check
  4. > bundle install
    • bundle check で足りないものがあると言われた場合に実行する。ただし、 sudoers に載ってる user じゃないと system への install ができないので注意。もしくは root で明示的に gem install missing-gem と打って install してしまうのが早いかも。

これで app を作る準備が整った。

さらに version 管理をしたい場合は git で行うのが楽。というのも "rails new" で app をつくると .gitignore とか git まわりの file も一緒に生成されるので。上記の command 群を実行したあとに以下を行えばおk。

  1. > git init
  2. > git add .
  3. > git commit -m 'Initialize'

Installing RubyGems on CentOS 5.6

Ruby を入れると RubyGems も一緒に入るんだけど 1.3.2 とかで version 低いのでこっちも手動で install 。いや gem update --system でもできるんだけど、せっかく Ruby 本体を checkinstall でつっこんだのでこっちも checkinstall 経由にする。…これでいいのかはわからないけど。

例によって先頭が # の場合 root で、 > の場合それ以外の user で打つ。

  1. > cd
  2. > mkdir src
    • ない場合に作る。
  3. > cd src/
  4. > wget http://rubyforge.org/frs/download.php/74619/rubygems-1.7.2.tgz
  5. > tar xzvf rubygems-1.7.2.tgz
  6. > cd rubygems-1.7.2
  7. # checkinstall ruby setup.rb
    • ln -s /usr/local/lib/installwatch.so /usr/local/lib64/ してるとこれが通らない。 "Copying file to the temporary directory" の部分で止まる。ので一時的に rm /usr/local/lib64/installwatch.so して通す。 error 出てるけど使ってる分には問題ないのでとりあえずで。
    • Sumarry に "RubyGems 1.7.2" 、 Requires に "ruby-1.9.2" を指定。
  8. # rpm -ivh /usr/src/redhat/RPMS/x86_64/rubygems-1.7.2-1.x86_64.rpm

てな感じで。

Installing SQLite on CentOS 5.6

Rails いじるのに default の DBMS である SQLite があったほうが何かと楽だと判断したので install 。ただ、 yum だと 3.3.6 で古くて sqlite3-ruby gem が install できないので最新の version を source から入れる。

先頭が # は root で、 > はそれ以外で打つ command 。

  1. > cd
  2. > mkdir src
    • ない場合に作る。
  3. > cd src/
  4. > wget http://www.sqlite.org/sqlite-autoconf-3070602.tar.gz
  5. > tar xzvf sqlite-autoconf-3070602.tar.gz
  6. > cd sqlite-autoconf-3070602
  7. > ./configure
  8. > make
  9. # checkinstall
    • Summary には "SQLite 3.7.6.2" と指定。ほかは default 。
  10. # rpm -ivh /usr/src/redhat/RPMS/x86_64/sqlite-autoconf-03070602-1.x86_64.rpm