海外サーバでRuby/MySQLを使う

引き続き海外のレンタルサーバのテスト中です。
今回は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

このブログ記事について

このページは、水の森が2008年2月17日 23:48に書いたブログ記事です。

ひとつ前のブログ記事は「NetFront v3.5 コンセプト版をAd[es]で試す」です。

次のブログ記事は「海外サーバのcronとサマータイム」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。