Rails 2.2でsjisを使う

既存システムのRails適用における大きな課題の一つはレガシデータベースを取り込むことだが、既存のデータベースは未だにsjis文字セットが主流だ。(少なくとも私の周辺ではそう)

以下、備忘録としてメモ。

手順

1. config\database.yml

development:
  adapter: oracle_enhanced
  encoding: sjis
  database: orcl
  pool: 5
  username: scott
  password: tiger
#  host: localhost

最初はencoding:シンボルを修正。

2. config\environment.rb

Rails::Initializer.run do |config|
  #
  :略
  :
  config.action_controller.default_charset='Shift_JIS'
end

Rails::Initializer.runメソッドのブロックで各種の初期値を設定する。

3. app\views\layouts\model.html.erb

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=Shift_JIS" />
  <title>People: <%= controller.action_name %></title>
  <%= stylesheet_link_tag 'scaffold' %>
</head>
<body>

<p style="color: green"><%= flash[:notice] %></p>

<%= yield  %>

</body>
</html>

レイアウトのmetaタグ。これを修正しないとブラウザによって文字セットが勝手に解釈されてしまう。
2.のenvironment.rbを修正することでこのスクリプトが生成される際に@@default_charsetが反映されるのだと期待していたのだが、そうではないようだ。

scaffoldの範疇であれば、最低限この3カ所を修正することでsjis(Shift_JIS)に対応できる。

んー、なんか忘れている感じがするんだよなぁ。

追記:

config/environment.rb

$KCODE = "s"

Ruby内部で文字列を扱う場合は、この指定も必要だったか。