111 votes

PG erreur de table non définie relation utilisateurs n'existe pas

J'ai vu cette question auparavant, mais seulement pour rspec. Je n'ai pas encore créé de test car c'est trop avancé pour moi, mais un jour bientôt je le ferai! :P

Je reçois cette erreur lorsque j'essaie de m'inscrire/connexionner à mon application. J'ai utilisé devise pour créer un utilisateur et aussi omniauth2 pour se connecter avec google.

Voici l'erreur

ActiveRecord::StatementInvalid at /users/auth/google_oauth2/callback
PG::UndefinedTable: ERROR:  relation "users" does not exist
LINE 5:              WHERE a.attrelid = '"users"'::regclass
                                        ^
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
              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

J'ai essayé rake db:migrate, mais il est déjà créé : dans la table de schéma les utilisateurs existent. Quelqu'un a déjà eu cette erreur avant ?

database.yml

config=/opt/local/lib/postgresql84/bin/pg_config

development:
  adapter: postgresql
  encoding: unicode
  database: tt_intraweb_development
  pool: 5
  username: my_username
  password:

test:
  adapter: postgresql
  encoding: unicode
  database: tt_intraweb_test
  pool: 5
  username: my_username
  password:

production:
  adapter: postgresql
  encoding: unicode
  database: tt_intraweb_production
  pool: 5
  username: my_username
  password:

2voto

techvineet Points 2306

La cause la plus probable est que votre râteau utilise un environnement différent de celui de database.yml que votre serveur web.

2voto

Stephen Points 197

Je recevais une erreur similaire en essayant d'exécuter des tests en utilisant rspec.

J'ai suivi les étapes de mais je me suis quand même retrouvé bloqué. La dernière étape que j'ai dû faire était de charger mon schéma dans ma base de données de test en utilisant :

RAILS_ENV=test rake db:schema:load

Après cela, le problème a disparu et j'ai pu passer au bug suivant. J'espère que cela vous donne quelques idées.

2voto

Roberto Capelo Points 9

Supprimez le dossier Admin et exécutez à nouveau rake.

2voto

MCB Points 494

(Je sais que c'est vieux, mais pour les googlers futurs)

Utilisez-vous devise? Je sais spécifiquement que omniauthable pose problème, mais peut-être d'autres aussi. Ça n'a pas besoin d'être devise cependant. Génériquement, la solution est de commenter le modèle, la classe, quoi que ce soit en question, et décommenter toute section demandée par les erreurs.

Pour moi, ce qui se passait c'est que devise lit le modèle User pour voir quels arguments vous avez pour devise (la méthode de classe c'est-à-dire devise :database_authenticatable, :registerable #etc)

Mais, il lira tout le fichier et si ce n'est pas un nouveau projet, il pourrait être perturbé par d'autres méthodes de classe comptant sur d'autres éléments (dans mon cas c'était le gem friendly_id, et ensuite un alias_method

La solution était de commenter le modèle User sauf les lignes de devise * et rake db:schema:load devrait fonctionner correctement.

  • sinon j'avais cette erreur :

    ArgumentError: Mapping omniauth_callbacks on a resource that is not omniauthable Veuillez ajouter devise :omniauthable au modèle User

2voto

user5783745 Points 1214

Si vous obtenez cette erreur lors de la migration, assurez-vous que le nom de votre modèle est au pluriel

par exemple

add_column :images, :url, :string

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X