2012-03-01 18 views
7

Tôi đang chạy Rails 3.2 và phiên bản mới nhất của Authlogic. Khi tôi chạy ứng dụng cục bộ trên máy Mac, nó hoạt động tốt. Khi tôi cố gắng chạy nó trên máy chủ sản xuất của tôi (Ubuntu với hành khách/Apache), tôi có được điều này:Authlogic không hoạt động với ứng dụng Rails 3.2 của tôi

You must establish a database connection before using acts_as_authentic 

Tôi không chắc chắn làm thế nào để khắc phục sự cố. Tôi đã đăng this related question trước đó ngày hôm nay trước khi tôi nhận ra rằng vấn đề là rộng hơn tôi nghĩ.

+0

Tôi từng là một fan cuồng tín lớn, và có nhiều ứng dụng trong thời đại 2.x sử dụng nó (bao gồm cả bộ điều hợp cho LDPA, RPX, vv). Tôi đã nâng cấp hầu hết trong số này lên 3.0.x và 3.2 nhưng trong quá trình quyết định rằng trên toàn bộ nó tốt hơn và dễ dàng hơn để di chuyển để đưa ra. Thật dễ dàng, và mã này sạch hơn (thường do được thiết kế trong kỷ nguyên 3.0). Điều này không trả lời câu hỏi của bạn .. Tôi chỉ đề cập đến nó để bạn ghi nhớ nếu authlogic giữ cắn; chuyển đổi để đưa ra không phải là một việc lớn như vậy, và nó sẽ không đưa bạn lâu để có được những điều cơ bản tại chỗ. – tardate

+0

Cuối cùng tôi đã chuyển sang Devise ngày khác. Đó là một công tắc đáng kinh ngạc và dễ dàng. –

+0

Điều này có vẻ là cố định. Bây giờ chúng ta cần sử dụng 'gem 'authlogic',: git => 'git: // github.com/binarylogic/authlogic.git'' trong gemfile để kéo từ nhánh master. –

Trả lời

9

Tôi đã tìm ra sự cố. Nhìn vào đoạn này từ Authlogic của lib/authlogic/acts_as_authentic/base.rb:

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

Nếu column_names ném một lỗi, db_setup? sẽ trả về false. Nhìn vào chức năng này khác, cũng từ 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 

Nếu db_setup? lợi nhuận sai, Authlogic sẽ ném một ngoại lệ, nhưng không phải là ngoại lệ cùng ném bởi column_names.

Vấn đề của tôi là column_names được ném ngoại lệ này:

/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 

Và lý do cho RẰNG ngoại lệ được rằng bàn của tôi sử dụng được gọi là user, không users, nhưng Rails đã không được chọn lên trên pluralize_table_names tôi thiết lập đúng cách . Khi tôi đã khắc phục sự cố pluralize_table_names của mình (dường như cách hoạt động của cài đặt này đã được thay đổi trong Rails 3.1), sự cố Authlogic của tôi đã biến mất.

Vì vậy, nếu bạn đang gặp vấn đề này, bạn có thể muốn thử điều này:

  • Clone repo Authlogic đến nơi nào đó trên máy dev của bạn
  • Thay đổi Gemfile của bạn để sử dụng phiên bản địa phương của Authlogic ('authlogic', :path => '/path/to/authlogic')
  • Thêm một cuộc gọi column_names để db_setup? ngoài begin/rescue/end khoản
  • Xem nếu bạn nhận được một khác nhau, có khả năng m quặng chính xác và thông tin, lỗi, giống như tôi đã làm
+0

Điều gì sẽ thực sự tốt đẹp, tất nhiên, là nếu Authlogic đã nhận thức được khả năng của vấn đề này. Tôi đăng một câu hỏi mới hỏi làm thế nào để phát hiện vấn đề này đặc biệt để tôi có thể áp dụng một bản vá để Authlogic ... giả sử đó là một ý tưởng tốt. http://stackoverflow.com/questions/9557860/how-do-i-catch-this-specific-error-in-rails#comment12115170_9557860 –

5

Tôi đã cố định điều này trên ngã ba của mình. Cho đến khi Ben có thời gian để kết hợp sửa chữa, bạn có thể làm việc xung quanh việc này bằng cách sử dụng nhánh cố định trong Gemfile của bạn;

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

Đối với bất kỳ ai khác có thể đã đến trang này tìm kiếm một câu trả lời.

Một lý do có thể là do bạn chưa tạo cơ sở dữ liệu thử nghiệm của mình.

Chỉ cần chạy:

$ RAILS_ENV = test rake db: tạo db: di chuyển

Các vấn đề liên quan