2012-03-01 6 views
7

私はRails 3.2とAuthlogicの最新バージョンを実行しています。私のアプリをMac上でローカルに実行すると、正常に動作します。私は私の本番サーバー(旅客/ ApacheでのUbuntu)上でそれを実行しようとすると、私はこれを取得:私のRails 3.2アプリケーションでAuthlogicが動作しない

You must establish a database connection before using acts_as_authentic 

私は問題を解決するかどうかはわかりません。今日私はthis related questionを投稿していましたが、問題が私が思ったよりも広いと分かりました。

+0

を移行私は以前は大人気のファンだったし、LDPA、RPXなどのアダプターも含め、2.x時代には多くのアプリを使っていました。私はこれらのほとんどを3.0.xと3.2にアップグレードしましたが、そのプロセスでは、全体的により良い、より簡単に移行することができました。簡単ですし、コードはより洗練されています(一般に3.0時代に設計されたため)。これはあなたの質問に答えるものではありません。私はそれを言いますので、authlogicが噛みついていればそれを念頭に置いてください。夢のように変えることはそれほど大したことではありませんし、基礎を整えるためにあなたをまったく待っているわけでもありません。 – tardate

+0

先日私はついにDeviseに切り替わりました。それは驚くほど簡単で無痛なスイッチでした。 –

+0

これは修正されているようです。今のところ、マスターブランチから引き出すには、gem = authlogic、:git => 'git:// github.com/binarylogic/authlogic.git''をgemfileに使用する必要があります。 –

答えて

9

問題を見つけました。 Authlogicのlib/authlogic/acts_as_authentic/base.rbからこのスニペットを見てください:

private 
     def db_setup? 
     begin 
      column_names 
      true 
     rescue Exception 
      false 
     end 
     end 

column_namesがエラーをスローした場合、db_setup?はfalseを返します。 base.rbからも、この他の機能を見てください:

def acts_as_authentic(unsupported_options = nil, &block) 
     # Stop all configuration if the DB is not set up 
     raise StandardError.new("You must establish a database connection before using acts_as_authentic") if !db_setup? 

     raise ArgumentError.new("You are using the old v1.X.X configuration method for Authlogic. Instead of " + 
     "passing a hash of configuration options to acts_as_authentic, pass a block: acts_as_authentic { |c| c.my_option = my_value }") if !unsupported_options.nil? 

     yield self if block_given? 
     acts_as_authentic_modules.each { |mod| include mod } 
    end 

db_setup?戻りfalseの場合、Authlogicはcolumn_namesによってスローされた例外、ではなく、同じ例外がスローされます。

私の問題はcolumn_namesはこの例外投げていたということでした。私のユーザーテーブルがないusersuserと呼ばれていることを

/Users/jason/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:1106:in `async_exec': PG::Error: ERROR: relation "users" does not exist (ActiveRecord::StatementInvalid) 
LINE 4:    WHERE a.attrelid = '"users"'::regclass 
             ^
:    SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull 
       FROM pg_attribute a LEFT JOIN pg_attrdef d 
       ON a.attrelid = d.adrelid AND a.attnum = d.adnum 
      WHERE a.attrelid = '"users"'::regclass 
       AND a.attnum > 0 AND NOT a.attisdropped 
      ORDER BY a.attnum 

、その例外の理由を、しかし、Railsは適切に設定私のpluralize_table_namesに拾っていませんでした。 pluralize_table_namesの問題を解決したら(明らかに、この設定の仕方はRails 3.1で変更されています)、私のAuthlogicの問題は解消されました。だから、

あなたはこの問題を抱えているならば、あなたはこのしようとする場合があります:(Authlogicのローカルバージョンを使用するようにGemfileを変更して、あなたのdevのマシン

  • 上のどこかにAuthlogicレポを

    • クローンを'authlogic', :path => '/path/to/authlogic'
    • は、あなたが別の、潜在的メートルを取得する場合参照してくださいbegin/rescue/end
    • db_setup?column_names呼び出しを追加します私のように正確で有益なエラーが発生しました
  • +0

    もちろん、Authlogicがこの問題の可能性を認識していれば、本当にいいと思います。私はAuthlogicにパッチを適用することができるように、この特定の問題を検出する方法を尋ねる新しい質問を投稿しました。それは良い考えだと仮定します。 http://stackoverflow.com/questions/95578​​60/how-do-i-catch-this-specific-error-in-rails#comment12115170_95578​​60 –

    5

    私はこれを私のフォークに修正しました。 Benが修正プログラムをマージするまでは、Gemfileの固定ブランチを使用して回避することができます。

    gem 'authlogic', :git => '[email protected]:james2m/authlogic.git', :branch => 'fix-migrations' 
    
    4

    このページで回答を探している他の人の場合は、

    あなたのテストデータベースが作成されていない可能性があります。

    だけで実行します。

    $ RAILS_ENV =テストすくいデシベル:DBを作成します。

    関連する問題