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
Nguồn
2012-03-04 19:42:24
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
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. –
Đ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. –