Hatena::ブログ(Diary)

マグネシウムライト

dev.kakkunpakkun.meへ移行しました。

2011-07-11

SinatraのmodularスタイルでAuthlogicを使うときに起こりがちなエラー

authlogicをsinatraのmodularスタイルで使おうとするとsinatra_adapter.rbでこんな感じのエラーが出ることがある。

authlogic-3.0.3/lib/authlogic/controller_adapters/sinatra_adapter.rb:50:in `included': undefined method `before' for Sinatra::Request:Class (NoMethodError)

これは'sinatra'ではなく'sinatra/base'のみrequireした場合に起こる。

たぶんsinatraがmodularスタイルに対応する前に作成されたんじゃないかと思う。

なのでsinatra_adapter.rbを以下のようにSinatra::Baseを使うように変更。

# Sinatra::Request.send(:include, Authlogic::ControllerAdapters::SinatraAdapter::Adapter::Implementation)
Sinatra::Base.send(:include, Authlogic::ControllerAdapters::SinatraAdapter::Adapter::Implementation)

これでどっちでも動くはず。あまりまだ動作をチェックしてない。とりあえずエラーはない。

動かしたバージョンは以下のとおり

sinatra
1.2.6
authlogic
3.0.3

問題はここで報告されててだいぶ経ってるんだけど治ってない。Sinatraで使う人が少ない上にmodularスタイルじゃないと起こらないからかな。。

#80: Sinatra adapter does not work with latest versions of Sinatra, Rack, and Ruby - Issues - binarylogic/authlogic - GitHub

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kakkunpakkun/20110711/1310367364
リンク元