2012-03-01 14 views
7

के साथ काम नहीं करता है मैं रेल 3.2 और एथलॉगिक का नवीनतम संस्करण चला रहा हूं। जब मैं अपने मैक पर स्थानीय रूप से अपना ऐप चलाता हूं, तो यह ठीक काम करता है। जब मैं अपने उत्पादन सर्वर (पैसेंजर/अपाचे के साथ Ubuntu) पर इसे चलाने के लिए प्रयास करते हैं, मैं इस मिल:ऑथलॉगिक मेरे रेल 3.2 एप

You must establish a database connection before using acts_as_authentic 

मुझे यकीन है कि कैसे समस्या का निवारण करने के लिए नहीं कर रहा हूँ। मैंने आज पहले this related question पोस्ट किया था इससे पहले कि मुझे एहसास हुआ कि समस्या मेरे विचार से व्यापक थी।

+0

मैं एक बड़ा ऑथलॉगिक प्रशंसक होता था, और इसका इस्तेमाल करते हुए 2.x युग में कई ऐप्स थे (एलडीपीए, आरपीएक्स आदि के लिए एडाप्टर सहित)। मैंने इनमें से अधिकांश को 3.0.x और 3.2 तक अपग्रेड कर दिया है, लेकिन इस प्रक्रिया में निर्णय लिया गया कि पूरी तरह से इसे बेहतर बनाने के लिए माइग्रेट करना बेहतर और आसान है। यह आसान है, और कोड क्लीनर है (आमतौर पर 3.0 युग में डिज़ाइन किए जाने के कारण)। यह आपके प्रश्न का उत्तर नहीं देता .. मैं बस इसका जिक्र करता हूं ताकि अगर आप ऑथलॉगिक वापस काटते रहें तो आप इसे ध्यान में रखें; तैयार करने के लिए स्विचिंग इतना बड़ा सौदा नहीं है, और मूलभूत बातें पाने में आपको बहुत समय लगेगा। – tardate

+0

अंततः मैं दूसरे दिन डेविस पर स्विच कर रहा था। यह एक आश्चर्यजनक रूप से आसान और दर्द रहित स्विच था। –

+0

ऐसा लगता है कि यह तय किया जा सकता है। अब हमें मास्टर शाखा से खींचने के लिए रत्न में 'gem' authlogic ', git =>' git: // github.com/binarylogic/authlogic.git'' 'का उपयोग करने की आवश्यकता है। –

उत्तर

9

मुझे समस्या का पता चला। Authlogic के lib/authlogic/acts_as_authentic/base.rb से इस स्निपेट को देखो: column_names एक त्रुटि फेंकता

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

हैं, तो db_setup? अवास्तविक लौटाते हैं। 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? रिटर्न झूठी, Authlogic एक अपवाद है, नहीं बल्कि एक ही अपवाद column_names द्वारा फेंका फेंक देते हैं।

मेरे समस्या यह है कि column_names इस अपवाद फेंक दिया गया था:

/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 

और है कि अपवाद के लिए कारण यह है कि है मेरे उपयोगकर्ता तालिका user कहा जाता है, नहीं users, लेकिन रेल ठीक से स्थापित करने मेरी pluralize_table_names पर उठा नहीं किया गया था । एक बार जब मैंने अपनी pluralize_table_names समस्या तय की (स्पष्ट रूप से जिस तरह से यह सेटिंग काम करता है रेल 3.1 में बदल दिया गया है), मेरी ऑथलॉगिक समस्या दूर हो गई।

तो आप इस समस्या हो रही है, तो आप इस की कोशिश करना चाहते हो सकता है: अपने देव मशीन

  • पर

    • क्लोन कहीं Authlogic रेपो Authlogic के स्थानीय संस्करण का उपयोग करने के लिए अपने Gemfile बदलें ('authlogic', :path => '/path/to/authlogic')
    • db_setup? करने के लिए एक column_names कॉल जोड़ें begin/rescue/end खंड
    • बाहर अगर आप किसी अन्य संभावित रूप से मीटर मिल देखें अयस्क सटीक और सूचनात्मक, त्रुटि, जैसे मैंने
  • +0

    वास्तव में अच्छा क्या होगा, निश्चित रूप से, अगर एथलॉगिक इस समस्या की संभावना से अवगत थे। मैंने एक नया सवाल पोस्ट किया है कि इस विशेष समस्या का पता लगाने के लिए कैसे करें ताकि मैं एथलॉगिक को पैच लागू कर सकूं ... मान लीजिए कि यह एक अच्छा विचार है। http://stackoverflow.com/questions/9557860/how-do-i-catch-this-specific-error-in-rails#comment12115170_9557860 –

    5

    मैंने इसे अपने कांटे पर तय कर दिया है। जब तक बेन में फिक्स विलय करने का समय न हो, तब तक आप अपने जेमफाइल में निश्चित शाखा का उपयोग करके इस पर काम कर सकते हैं;

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

    किसी और के लिए जो इस पृष्ठ पर उत्तर दे सकता है।

    एक कारण यह हो सकता है कि आपने अपना परीक्षण डेटाबेस नहीं बनाया है।

    बस चलाने:

    $ RAILS_ENV = परीक्षण रेक db: db बनाएँ: विस्थापित

    संबंधित मुद्दे