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.

Était-ce utile?

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 pour db_setup? en dehors de begin/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 :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top