ap4r-0.3.7 をリリースしました

追記: 2009-03-24
RubyForge への up がうまくいってなかったのか、サイトから直接 DL はできてたのですが、gem コマンドでのインストールで 0.3.7 がインストールできてませんでした...。さきほど、再度ファイルを up しなおしたところ、問題なく gem コマンドからインストールできました。



前回リリースからだいぶ間があいてしまいましたが、ようやくリリースしました。 (^^;

主な変更点

  1. Rails から AP4R サーバに接続する際の、可用性の向上および負荷分散
  2. メッセージの永続化先として、PostgreSQL を使用し、PostgresPR でつなぐ場合の不具合
  3. async_helper.rb を vendor/plugins 以下から移動
  4. サンプルの HelloWorld アプリを Rails-2.3.2 に対応

1. については以前、Rails から AP4R サーバへの接続の可用性とか、負荷分散とか... のエントリーに書きましたが、Rails -> AP4R の接続部分が SPoF (Single Point of Failure) になっていたので、障害時に別の AP4R サーバにフェイルオーバーするような設定を可能にしました。


2. については、id:cypher さんよりバグレポートをあげてもらってました。
ありがとうございます & 対応がとても遅れてしまってすみません。


3. の変更により、ap4r-0.3.7 以降を使用する場合は、vendor/plugins/ap4r 以下の async_helper.rb を削除してください。新規にインストールする場合は以下のとおりです。

%ruby script/plugin install http://ap4r.rubyforge.org/svn/tags/ap4r-0.3.7/samples/hello_world_for_rails2/vendor/plugins/ap4r


4. については、app/controllers/application.rb の名前が変わったくらいでしょうか。 :-p


注意点

rails-2.1.2 以前と rails-2.2.x 以降が混在した環境だと、下記のような GemException が発生する可能性があります。

% ruby186 script/mongrel_ap4r start -A config/queues_disk.cfg
/var/lib/gems/1.8/lib/rubygems.rb:149:in `activate': can't activate activesupport (= 2.1.2, runtime), already activated activesupport-2.3.2 (Gem::Exception)
        from /var/lib/gems/1.8/lib/rubygems.rb:165:in `activate'
        from /var/lib/gems/1.8/lib/rubygems.rb:164:in `each'
        from /var/lib/gems/1.8/lib/rubygems.rb:164:in `activate'
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:37:in `require'
        from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/message-store.rb:389
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:32:in `gem_original_require'
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:32:in `require'
        from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/queue-manager.rb:23
         ... 8 levels...
        from /var/lib/gems/1.8/gems/ap4r-0.3.7/lib/ap4r.rb:6
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:38:in `gem_original_require'
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:38:in `require'
        from script/mongrel_ap4r:2


reliable-msg/message-store.rb で active_record/vendor/mysql を require していますが、このファイルが rails-2.2.x 以降でなくなった影響で、発生するようになりました。
# Rails の混在してない環境、あるいは mysql-ruby がインストールされている環境では発生しません。


メッセージの永続化先に MySQL を使用しない場合にも、こんなエラーがでてしまうのはちょっと嫌なので近いうちになんとかしようと思います。とりあえずの対応としては、reliable-msg/message-store.rb の 386 行目あたりを次のように修正してしまってください。 <(_ _)>

begin
  require "mysql"
rescue LoadError => le
  #require "active_record/vendor/mysql"
  raise le
end