Wyjaśniałem problem. Spójrz na ten urywek z Authlogic na lib/authlogic/acts_as_authentic/base.rb
:
private
def db_setup?
begin
column_names
true
rescue Exception
false
end
end
Jeśli column_names
zgłasza błąd, db_setup?
zwróci false. Spójrz na tej drugiej funkcji, również ze 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
Jeśli db_setup?
zwraca false, Authlogic rzuci wyjątek, ale nie takie same wyjątek rzucony przez column_names
.
Moim problemem było to, że column_names
rzucał ten wyjątek:
/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
A powodem tego wyjątku jest, że mój stół użytkownik nazywa user
nie users
, ale Rails nie zbierał się na moim pluralize_table_names
prawidłowo ustalone . Po naprawieniu problemu pluralize_table_names
(podobno sposób, w jaki to ustawienie zostało zmienione w Rails 3.1), mój problem z Authlogic zniknął.
Więc jeśli masz ten problem, możesz spróbować tego:
- sklonować repo Authlogic gdzieś na komputerze dev
- Zmień Gemfile korzystać z lokalnej wersji Authlogic (
'authlogic', :path => '/path/to/authlogic'
)
- Dodaj
column_names
wezwanie do db_setup?
poza begin
/rescue
/end
klauzuli
- Zobacz, czy masz inny, potencjalnie m Ruda dokładna i pouczająca, błąd, tak jak ja.
Byłem wielkim fanem authlogic i miałem wiele aplikacji w erze 2.x (włączając adaptery do LDPA, RPX itp.). Od tego czasu zaktualizowałem większość z nich do wersji 3.0.x i 3.2, ale w procesie zdecydowałem, że ogólnie jest to lepsze i łatwiejsze do migracji. To proste, a kod jest czystszy (głównie dzięki temu, że został zaprojektowany w 3.0. To nie odpowiada na twoje pytanie. Po prostu wspominam o tym, więc masz to na uwadze, jeśli authlogic ciągle przegryza; przejście na programowanie nie jest tak wielką sprawą i nie zajmie Ci to dużo czasu, aby uzyskać podstawowe informacje. – tardate
W końcu zamieniłem się w Devise. Była to zadziwiająco łatwa i bezbolesna zmiana. –
To wydaje się być naprawione. Na razie musimy użyć 'gem 'authlogic',: git => 'git: // github.com/binarylogic/authlogic.git'' w gemfile, aby pobrać z gałęzi master. –