Descubrí el problema. Mira este fragmento de Authlogic de lib/authlogic/acts_as_authentic/base.rb
:
private
def db_setup?
begin
column_names
true
rescue Exception
false
end
end
Si column_names
genera un error, db_setup?
volverá falsa. Mira esta otra función, también de 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
Si db_setup?
vuelve falsa, Authlogic arrojará una excepción, pero no la misma excepción lanzada por column_names
.
Mi problema era que column_names
estaba lanzando esta excepción:
/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
Y la razón de esta excepción es que mi tabla de usuario se llama user
, no users
, pero los carriles no se den cuenta de mi pluralize_table_names
configurar en forma adecuada . Una vez que arreglé mi problema pluralize_table_names
(al parecer, la forma en que funciona esta configuración se ha cambiado en Rails 3.1), mi problema Authlogic desapareció.
Así que si usted está teniendo este problema, es posible que desee probar esto:
- Clonar el repositorio Authlogic a algún lugar en su máquina dev
- Cambiar el Gemfile utilizar la versión local de Authlogic (
'authlogic', :path => '/path/to/authlogic'
)
- añadir una llamada a
column_names
db_setup?
fuera de la cláusula begin
/rescue
/end
- ver si le da una forma diferente, potencialmente m mineral exacto e informativo, error, como lo hice
Solía ser un gran fan de Authlogic y tenía muchas aplicaciones en la era 2.x que lo usaba (incluidos los adaptadores para LDPA, RPX, etc.). Desde entonces, he actualizado la mayoría de estos a 3.0.xy 3.2, pero en el proceso decidí que, en general, es mejor y más fácil migrar para diseñar. Es fácil, y el código es más limpio (generalmente debido a haber sido diseñado en la era 3.0). Esto no responde a tu pregunta. Solo lo menciono para que lo tengas en cuenta si authlogic sigue mordiendo; cambiar de idea no es tan importante, y no te tomará mucho tiempo conseguir lo básico en su lugar. – tardate
Finalmente terminé cambiando a Devise el otro día. Fue un cambio asombrosamente fácil e indoloro. –
Esto parece ser reparado. Por ahora tenemos que usar 'gem 'authlogic',: git => 'git: // github.com/binarylogic/authlogic.git'' en el archivo gem para extraer de la rama principal. –