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:

0voto

milaziggy Points 11

Il peut généralement arriver lorsque vous utilisez le mauvais type d'association entre les modèles, vérifiez la destruction des dépendances et les associations has_many, par exemple:

Mauvaise façon qui peut causer ce problème:

article.rb

 has_many :subcategories, through: :categories, dependent: :destroy

subcategory.rb

has_and_belongs_to_many :articles

Bonne méthode:

article.rb

 has_many :subcategories, through: :categories, dependent: :destroy

subcategory.rb

déclarer l'association avec les catégories ici, pas avec les articles (belongs_to / has_and_belongs_to)

0voto

Paul Volet Points 1

Oublier le fichier de migration dans votre commit peut causer ce problème. Lorsqu'il est poussé sur Heroku, par exemple rails db:migrate ne fonctionnera évidemment pas. Assurez-vous que le fichier de migration définissant la table non définie a été commité.

0voto

brunoao86 Points 1

Mon cas était également lié à FactoryGirl/FactoryBot et j'ai juste eu à changer la définition. Remplacer la constante par une chaîne.

Mon env :

Rails 5.2.6
factory_bot 4.8.2

De ceci :

FactoryBot.define do
  factory :user, class: Admin::User do
    ...
  end
end

À ceci :

FactoryBot.define do
  factory :user, class: 'Admin::User' do
    ...
  end
end

Ce qui est recommandé par Commencer - Spécifier la classe explicitement.

0voto

Akhmed Gasanov Points 97

J'essayais d'exécuter le script test.rake et j'ai rencontré le même problème. J'ai passé beaucoup de temps à essayer de comprendre ce qui se passait. Finalement, cela s'est arrangé après que j'ai renommé le fichier.

-1voto

mecampbellsoup Points 41

Dans mon cas, j'ai dû commenter 2 fichiers ActiveAdmin. Voici les étapes que j'ai suivies :

  1. Erreur/initiale (notez que nous utilisons Solr sur ce projet) : rkdbm java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) => Solr is already running rake aborted! PG::UndefinedTable: ERROR: relation "discussions" does not exist LINE 5: WHERE a.attrelid = '"discussions"'::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 = '"discussions"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/app/admin/users.rb:25:in `block in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/app/admin/users.rb:1:in`' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:3:in `block in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:1:in`' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/environment.rb:5:in `' Tasks: TOP => db:migrate => environment (See full trace by running task with --trace)

J'ai commenté le fichier app/admin/discussions.rb selon la réponse d'Arcolye ci-dessus et j'ai essayé de migrer à nouveau ma base de données.

Même erreur.

J'ai regardé de plus près la trace de pile, et j'ai remarqué qu'en réalité app/admin/users.rb:25 lançait l'exception - et en effet, ce fichier a une dépendance sur ma table discussions (via l'exécution de Discussion.all).

Enfin, en commentant le contenu de users.rb, j'ai finalement pu migrer ma base de données avec succès.

À noter : il y a une discussion ici dans ActiveAdmin concernant la question de savoir si ce gem devrait charger la base de données lorsque cela est nécessaire.

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