引き続き海外のレンタルサーバのテスト中です。
今回はDBについてのメモ。
PSPカスタムテーマあぷろだでは、用途によってSDBMとPostgreSQLを使い分けています。
SDBMは何も考えずに別サーバに移行できそうですが、PostgreSQLはちょっと困ったことが。いまテスト中のこのレンタルサーバでは、データベースの文字セットがどうしてもASCIIになってしまうのです。日本語を扱うにはちょっと不安です。
いろいろ試行錯誤した結果、あきらめてMySQLに乗り換えることにしました。MySQLなら、文字セットの変更はphpMyAdminで一発でした。
ただ、サーバにはRuby用のDBIモジュールもMySQLモジュールも入っていませんでした。サポートに申請を出せば、Ruby対応の(Ruby on Railsすら使える)サーバにアカウントを移してくれるようなのですが、とりあえずはRuby/MySQLを使ってみることにしました。これもサーバには入っていませんが、Pure Rubyなモジュールなので、簡単に導入できるはず。
Pure Rubyとはいえ、本来はインストールするためには setup.rb や install.rb をシェルで実行する必要があります。しかしこのサーバはシェルが利用できないので、全部手作業で導入してみました。
1. 事前準備
http://www.tmtm.org/ruby/mysql/などからファイル一式(ruby-mysql-0.2.6.tar.gz)をダウンロードします。
アーカイブの中身をのぞいてみると、README、インストールスクリプト、テストスクリプトなどが入っていますが、本体は mysql.rb という1ファイルだけのようです。
2. セットアップ
setup.rb は、たった17行のスクリプトです。READMEによると、MySQL の UNIX ドメインソケットを調べてモジュール本体(mysql.rb)に書き込んでいるのだそう。
なので、ここは一つ大胆に、setup.rb と mysql.rb をWebサーバに設置して、以下のようなCGIスクリプトを走らせてみます。
system "ruby setup.rb"
3. テスト
本当はここで test.rb を走らせてテストしたいところですが、このレンタルサーバでは CREATE DATABASE の権限がユーザにない(DBはWebコントロールパネルで作成する)ので、テストは通りません。なのでばっさり割愛。
4. インストール
install.rb の中身を見てみたら、単に mysql.rb をコピーしてるだけだったので、setup.rb のようにCGI経由で走らせる必要もなさそうです。mysql.rb を適当なディレクトリに移動。
以上で、あっさりとRuby/MySQLの導入が完了しました。さすがPure Rubyです。
なお、海外サーバでMySQLを使う場合は、まずタイムゾーンと文字セットをはっきりさせておいたほうがいいでしょう。私は以下のようなメソッドを作ってあります。
def connect db = Mysql.new('localhost', DB_USER, DB_PASSWD, DB_NAME) db.query("SET time_zone = '+09:00'") db.query("SET NAMES 'utf8'") yield(db) db.close end