Authlogic ne fonctionne pas avec mon application Rails 3.2
-
14-11-2019 - |
Question
Je dirige Rails 3.2 et la dernière version d'Authlogic. Lorsque j'exécute mon application localement sur mon Mac, cela fonctionne bien. Lorsque j'essaie de l'exécuter sur mon serveur de production (Ubuntu avec passager / apache), j'obtiens ceci:
You must establish a database connection before using acts_as_authentic
Je ne sais pas comment résoudre le problème. Je posté Cette question connexe Plus tôt dans la journée avant, je me rends compte que le problème était plus large que je ne le pensais.
La solution
J'ai compris le problème. Regardez cet extrait de l'Authlogic lib/authlogic/acts_as_authentic/base.rb
:
private
def db_setup?
begin
column_names
true
rescue Exception
false
end
end
Si column_names
lance une erreur, db_setup?
reviendra false. Regardez cette autre fonction, également à partir 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?
Renvoie False, Authlogic lancera une exception, mais pas la même exception lancée par column_names
.
Mon problème était que column_names
Jetait cette exception:
/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
Et la raison de cette exception est que ma table utilisateur est appelée user
, ne pas users
, mais Rails ne ramassait pas mon pluralize_table_names
réglage correctement. Une fois que j'ai corrigé mon pluralize_table_names
Problème (apparemment, le fonctionnement de ce paramètre a été modifié dans Rails 3.1), mon problème Authlogic a disparu.
Donc, si vous rencontrez ce problème, vous voudrez peut-être essayer ceci:
- Clone le Repo Authlogic à quelque part sur votre machine de développement
- Changez votre gemfile pour utiliser la version locale d'Authlogic (
'authlogic', :path => '/path/to/authlogic'
) - Ajouter un
column_names
appeler pourdb_setup?
en dehors debegin
/rescue
/end
clause - Voyez si vous obtenez une erreur différente, potentiellement plus précise et informative, comme je l'ai fait
Autres conseils
J'ai corrigé cela sur ma fourchette. Jusqu'à ce que Ben ait le temps de fusionner le correctif, vous pouvez contourner ceci en utilisant la branche fixe dans votre gemfile;
gem 'authlogic', :git => 'git@github.com:james2m/authlogic.git', :branch => 'fix-migrations'
Pour toute autre personne qui aurait pu venir sur cette page à la recherche d'une réponse.
Une des raisons pourrait être que vous n'avez pas créé votre base de données de test.
Il suffit de courir:
$ Rails_env = Test Rake DB: Créer DB: Migrer
Suivez le problème ouvert à https://github.com/binarylogic/authlogic/issues/318 et +1 donc le correctif est fusionné bientôt :)