Я понял проблему. Посмотрите на этот отрывок из 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?
вернет ложь. Посмотрите на эту другую функцию, а также от 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
, но Rails не поднимала на моем pluralize_table_names
настройки правильно , Как только я исправил свою проблему pluralize_table_names
(очевидно, что этот параметр работает, был изменен в Rails 3.1), моя проблема с Authlogic исчезла.
Так что, если вы с этой проблемой, вы можете попробовать это:
- Clone репо Authlogic где-то на вашем Dev машине
- Измени Gemfile использовать локальную версию Authlogic (
'authlogic', :path => '/path/to/authlogic'
)
- Добавить
column_names
вызов db_setup?
вне пункта
- в
begin
/rescue
/end
Смотрите, если вы получите другие, потенциально м руд точный и информативный, ошибка, как я сделал
Раньше я был большим поклонником authlogic, и у меня было много приложений в эпоху 2.x (включая адаптеры для LDPA, RPX и т. Д.). С тех пор я обновил большинство из них до 3.0.x и 3.2, но в процессе решил, что в целом его лучше и легче переносить, чтобы разработать. Это легко, и код чище (как правило, из-за того, что он был разработан в эпоху 3.0). Это не отвечает на ваш вопрос. Я просто упоминаю об этом, поэтому вы помните об этом, если authlogic продолжает откусывать; переход на разработку не является таким большим делом, и вам не понадобится много времени, чтобы получить основы. – tardate
В конце концов я перешел на Devise на другой день. Это был удивительно простой и безболезненный переключатель. –
Это кажется исправленным. На данный момент нам нужно использовать 'gem 'authlogic',: git => 'git: // github.com/binarylogic/authlogic.git'' в gemfile, чтобы вытащить из ведущей ветки. –