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:

1voto

Julian Mann Points 973

J'avais ce problème et il s'est avéré être causé par Grape API. J'ai remarqué dans la trace de la pile que le fichier de routes était en train d'être lu pendant la migration.

Dans routes.rb, l'API Grape est montée

mount API::Base => '/'

Et dans l'API, il y avait des références au modèle manquant. Donc, grâce à cette réponse je l'ai mis dans un bloc qui détecte s'il est exécuté par le serveur ou pendant la migration.

unless ( File.basename($0) == "rake" && ARGV.include?("db:migrate") )
    mount API::Base => '/'
end

Et cela a fonctionné.

1voto

juliangonzalez Points 2147

J'avais l'erreur suivante et en recherchant dans tout mon code d'application pour type_zones, je n'ai pas pu le trouver. J'ai également regardé dans la base de données et elle était mise à jour.

Il s'est avéré que c'était un fichier sous fixtures /test/fixtures/type_zones.yml qui posait problème.

ERROR["test_should_get_new", UsersControllerTest, 0.47225757399145514]
test_should_get_new#UsersControllerTest (0.47s)
ActiveRecord::StatementInvalid:  ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "type_zones" does not exist
    LINE 1: DELETE FROM "type_zones"
                        ^
    : DELETE FROM "type_zones"

1voto

Mateus Luiz Points 427

Pour ceux qui rencontrent encore ce problème, dans mon cas, c'était ma fabrique dans FactoryGirl qui déclenchait cette erreur.

J'essayais d'ajouter une référence via '.new' ou '.create'.

0voto

Rex Points 238

Donc, j'ai eu le même problème juste maintenant. N'oubliez pas d'avoir un seul modèle dans chaque migration. Cela a résolu le problème pour moi.

J'ai trouvé la réponse ici.

0voto

John Chriest Points 1

J'ai attrapé l'erreur :

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "users" does not exist
LINE 8:                WHERE a.attrelid = '"users"'::regclass

Il s'est avéré que c'était une correction super facile. J'avais copié des fichiers d'une version plus ancienne du projet et j'avais oublié de les imbriquer dans un dossier "migrate". Quand je l'ai fait, cela a résolu le problème pour moi.

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