Rails + Ludia でテストする場合にハマった点
Ludia の機能を利用するRailsアプリケーションをテストする際、テスト用のデータベースが作成される度に Ludia をインストールする必要があります。しかし、標準の Rails では(当然ですが)この操作が行われないため、Ludia を必要とするコードがテスト中に実行されると、そこでエラーが発生してしまいます。
この問題を解決するためには、db:test:purge タスクが createdb した後で、かつ実際にテストが始まる前にpqsenna2.sql をデータベースに読み込む必要があります。
試行錯誤の結果、以下のようなコードを lib/tasks/ludia.rake に追加することで解決できました。
namespace :db do namespace :test do namespace :ludia do task :install => :environment do dbname = ActiveRecord::Base.configurations["test"]["database"] sh "psql -f `pg_config --sharedir`/pgsenna2.sql #{dbname}" end end task :clone => %w(test:ludia:install) task :clone_structure => %w(test:ludia:install) end end
(以下、11/29 18:30頃追記しました。コメントありがとうございました。)
psql -f `pg_config --sharedir`/pgsenna2.sql template1
として template1 データベースにインストールしておくと、上記のような細工をしなくても createdb したときにこれがコピーされるそうです。状況にもよりますが、多くの場合(今後作成するdbにludiaがインストールされて問題が無いのであれば)、こちらのほうが良さそうですね。