CentOS4 + Ruby1.9.1でRedmineを動かす
Redmineを使いたかったものの、ちょうどいいサーバがCentOS4しかなかったので、動かすまでの手順メモ。以前のメモの書き直し。
環境は以下の通り。
rubyのインストール
CentOS4でもrubyのrpmは提供されているが、rubygemsのrpmはyumでは見当たらない。そこで、rubygems-1.3.6をサイトからダウンロードしてインストールしようとするが、rubyのバージョンが低いためか、以下のようなエラーに遭遇する。
./lib/rubygems.rb:124: uninitialized constant Gem::RbConfig (NameError)
from setup.rb:24:in `require'
from setup.rb:24
RbConfigが 1.8.5 からのサポートであるのが原因らしいので、新しいバージョンのrubyをインストールする。ruby公式サイトからソースをダウンロード。今回は色気を出して最新の安定板 1.9.1-p378 を使用。おそらく、ここで 1.8系を選択しておけば、後に出てくるような日本語の問題は出なかったっぽい。
ビルドとインストールは通常通りで特に問題なし。インストールパスは /usr/local/ruby/ を指定。
$ tar xzfv ruby-1.9.1-p378.tar.gz $ cd ruby-1.9.1-p378 $ ./configure --prefix=/usr/local/ruby $ make $ sudo make install
パスを通す。必要であれば、.bashrcにも書く。
$ export PATH=/usr/local/ruby/bin:$PATH $ ruby -v ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux]
その後、rubygems の tar.gz を展開したディレクトリに移動し、インストール。
$ sudo ruby ./setup.rb
Redmineのインストール
ここからは、Redmineの公式サイトにあるインストール手順通りに進むので、手順のみ簡単に記載。
railsその他をインストールする。railsは 2.3.5がインストールされた。
# プロキシが必要な場合は、プロキシを設定 $ export http_proxy=... $ sudo gem install rails $ sudo gem install mysql
redmineのパッケージを展開。
$ tar xzfv ../redmine-0.9.3.tar.gz $ cd redmine-0.9.3
セッションストアの設定。
$ rake config/initializers/session_store.rb
データベースを設定。MySQLを使用する。
# vi config/database.yml production: adapter: mysql database: redmine host: localhost username: redmine password: redmine encoding: utf8
上記のデータベースを作成。今回はRedmineを内部だけで利用するので、DBの権限は全面的に許可。ここは必要なクエリだけに制限した方が良い。
$ mysql -u root > create database redmine; > grant all on redmine.* to redmine@'localhost' identified by 'redmine'; > flush privileges; > exit;
mysqlのデフォルトエンコーディングが utf8になっていなかったので、修正。
# vi /etc/my.cnf (以下を追加) [mysqld] default-character-set=utf8 [mysql.server] default-character-set=utf8 [mysql] default-character-set=utf8
$ sudo /etc/init.d/mysql restart $ mysql -u root > show variables like 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 7 rows in set (0.01 sec)
データベースを初期化して、Webrickを起動。
$ rake db:migrate RAILS_ENV=production $ ./script/server -e production
ブラウザで http://hostname:3000/ にアクセスすると、Redmineが利用できる。
日本語の問題
上記だけだと、テキストフォームに日本語を利用すると、500番エラーになる。
エラーメッセージは下記。
ActionView::TemplateError (incompatible character encodings: UTF-8 and ASCII-8BIT) on line
Webを調べると以下のような情報がある。
https://rails.lighthouseapp.com/projects/8994/tickets/2476
https://rails.lighthouseapp.com/projects/8994/tickets/2188
どうも、ruby1.9から文字列にエンコーディングが設定されて、それがデフォルトでASCII-8BITになるのだが、DB adapter(MySQL/Ruby)がエンコーディングを気にせずに、デフォルトのASCII-8BITのまま返してしまうのが原因らしい。
今回はパッチをあてて対応。上記のサイトにはquickfixがいくつかあるが、以下のサイトの情報をたよりに良さげなパッチを入手。
http://kimiyure.betoku.jp/article/0240496.html
パッチ http://gist.github.com/273741
ダウンロードリンクからパッチをダウンロード。tar.gzを展開し、中のrbファイルを、パッチ冒頭の説明にあるとおりのパスにファイルを配置する。具体的には、redmine-0.9.3/config/initializers/ 以下。
再度サーバーを起動
$ ./script/server -e production
これだけだと以下のエラーが発生しうまく行かない。
*** Exception RuntimeError in PhusionPassenger::Railz::ApplicationSpawner (can't modify frozen string) (process 30678):
from /usr/local/ruby/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:186:in `strip!'
from /usr/local/ruby/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:186:in `initialize'
from /var/www/redmine-0.9.3/config/initializers/ruby_191_hacks.rb:12:in `new'
from /var/www/redmine-0.9.3/config/initializers/ruby_191_hacks.rb:12:in `'
...
どうもパッチ内部のバージョンチェックの部分で失敗しているらしいので、12行目のifと対応するendをコメントアウト。
再度サーバーを再起動すると、プロジェクトの詳細などに日本語を入れてもうまくいく。OK