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:

12voto

Arcolye Points 2602

Cela est souvent causé par un bug dans ActiveAdmin. Voici comment contourner le bug :

Si vous utilisez ActiveAdmin, quel que soit le tableau que PG dit ne pas exister, commentez le contenu de ce fichier rb ActiveAdmin.

Par exemple, pour ce cas PGError: ERROR: relation "users" does not exist, commentez l'intégralité du contenu de app/admin/users.rb, puis décommentez après avoir effectué vos migrations.

5voto

igmnlt Points 165

Ce problème pour moi était causé par Factory Girl rails. Je recommanderais à ceux qui l'utilisent de renommer le dossier specs/factories en specs/temp et d'essayer

RAILS_ENV=votre_environnement bundle exec rake db:migrate --trace

S'il passe, alors vous venez de trouver ce qui le causait. Une rapide recherche dans le dépôt GitHub de Factory Girl Rails m'a aidé à identifier le problème.

Les factories échouaient parce que j'essayais d'instancier un modèle qui n'existait pas lors de l'exécution ! Exemple de code ci-dessous :

FactoryGirl.define do
  factory :billing_product, class: 'Billing::Product' do
    name            Faker::Cat.name
    product_type    'fuel'
    active          true
    payment_options [Billing::PaymentOption.new(term: 1, payment_term: 1)]
  end

Encapsuler le tableau dans un bloc (ajouter {}) a résolu le problème pour moi. Notez que payment_options peut prendre plus d'une option de paiement dans l'exemple...

payment_options {[Billing::PaymentOption.new(term: 1, payment_term: 1)]}

Référez-vous à la partie Dynamic Attributes de la documentation de Factory Girl Rails pour plus d'informations.

N'oubliez pas de renommer votre dossier factories !

4voto

Muhammad Zubair Points 103

J'étais confronté au même problème et puis j'ai découvert la solution suivante.

Assurez-vous d'avoir entré toutes les informations suivantes dans le fichier database.yml et qu'elles sont correctes :

développement :
 adapter : postgresql
 encoding : unicode
 database : my_database
 host : localhost
 port : 5432
 pool : 5
 username : postgres
 password : xyz

test :
 adapter : postgresql
 encoding : unicode
 database : my_test_database
 host : localhost
 port : 5432
 pool : 5
 username : postgres
 password : xyz

3voto

KnuturO Points 201

J'ai eu ce problème après avoir supprimé la table des utilisateurs. La solution était de changer

change_table(:users)

à

create_table(:users)

3voto

LukyBoy -KU Points 967

::Migration[5.0] était manquant dans les migrations. au lieu de renvoyer une erreur de syntaxe, elle renvoie

PG::UndefinedTable: ERREUR : la relation des rôles n'existe pas

après avoir perdu des heures, j'ai finalement découvert que la migration ::Migration[5.0] manquait.

Migration erronée:

class CreateRoles < ActiveRecord # <---- Faites attention
  def change
    create_table :roles do |t|
      t.string :name
      t.integer :code, limit: 2
      t.boolean :is_active, default: true

      t.timestamps
    end
  end
end

Migration corrigée et correcte

class CreateRoles < ActiveRecord::Migration[5.0]
  def change
    create_table :roles do |t|
      t.string :name
      t.integer :code, limit: 2
      t.boolean :is_active, default: true

      t.timestamps
    end
  end
end

Cela pourrait être un bug avec rails et pourrait aider quelqu'un, au lieu de lutter et se demander.

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