PG Non définissable error relation users n'existe pas
je vois cette question avant, mais seulement pour rspec. Je ne suis pas encore créer test parce que son trop d'avance pour moi, mais un jour bientôt je le ferai! : P
je reçois cette erreur lorsque j'essaie de m'inscrire/ me connecter avec mon application. Je ne sais pas où chercher à le résoudre. J'utilise devise pour créer mon utilisateur et aussi omniauth2 pour me connecter avec google .
c'est 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 schema des utilisateurs existent. a toute personne d'obtenir cette erreur avant?
de la base de données.yml
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
development:
adapter: postgresql
encoding: unicode
database: tt_intraweb_development
pool: 5
username: my_username
password:
# Connect on a TCP socket. Omitted by default since the client uses a
# domain socket that doesn't need configuration. Windows does not have
# domain sockets, so uncomment these lines.
#host: localhost
#port: 5432
# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public
# Minimum log levels, in increasing order:
# debug5, debug4, debug3, debug2, debug1,
# log, notice, warning, error, fatal, and panic
# The server defaults to notice.
#min_messages: warning
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
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:
Merci!
20 réponses
dans un premier temps, vous devez détacher toutes les connexions hors de la base de données. Par défaut, vous utilisez l'environnement development . Ensuite, essayez de réinitialiser la base de données avec ce qui suit:
rake db:reset
la tâche rake db:reset supprimera la base de données et la configurera à nouveau. C'est fonctionnellement équivalent à rake db:abandon de la db:le programme d'installation.
ce n'est pas la même chose que de gérer toutes les migrations. Le contenu du schéma actuel.dossier rb. Si une migration ne peut pas être annulée, rake db:reset peut pas vous aider. Pour en savoir plus sur le dumping du schéma voir Schéma de décharge et vous section. Rails Docs
si l'astuce n'aide pas, supprimez la base de données, puis recréez-la à nouveau, migrez les données, et si vous avez des graines, semez la base de données:
rake db:drop db:create db:migrate db:seed
ou en bref (depuis 3.2):
rake db:migrate:reset db:seed
Depuis db:migrate:reset
implique de chute, de créer et de migration de la db. Parce que l'environnement par défaut pour rake
est développement , dans le cas où vous voyez l'exception dans les tests spec, vous devriez recréer db pour le test environnement comme suit:
RAILS_ENV=test rake db:drop db:create db:migrate
ou avec juste le chargement de la migré régime:
RAILS_ENV=test rake db:drop db:create db:schema:load
dans la plupart des cas, le test la base de données est ensemencée pendant les procédures d'essai, de sorte que l'action de tâche db:seed
n'est pas requise pour être acceptée. Sinon, vous devez préparer la base de données (Ceci est déprécié dans Rails 4 ):
rake db:test:prepare
et ensuite (si elle est réellement requise):
RAILS_ENV=test rake db:seed
sur les nouvelles versions de Rails l'erreur ActiveRecord:: NoEnvironmentInSchemaError peut être augmenté, il suffit de préparer les tâches avec un environnement de base de données tâches: db:environnement:1519130920" :
RAILS_ENV=test rake db:environment:set db:drop db:create db:migrate
votre base de données de test n'est pas prête pour rspec.
Préparez votre base de données de test pour rspec pour corriger cette erreur
RAILS_ENV=test rake test:prepare
il va supprimer, créer et ajouter des migrations à votre base de données de test
dans le cas où la tâche de ratissage est avortée avec un message comme" PG::Error: ERROR: database "[your_db_test] " est accédé par d'autres utilisateurs 'exécuter celui-ci
RAILS_ENV=test rake db:migrate
j'ai eu une erreur similaire. La racine de mon erreur était que j'avais une référence à un modèle de Rails dans mes usines.dossier rb. Donc ça a causé un problème d'erreur de charge. Le correctif était d'envelopper la référence dans un bloc ou {}
de sorte qu'elle retarde son exécution.
voici le code brisé:
FactoryGirl.define do
factory :user do
guid User.new.send(:new_token)
end
end
et il était errorant parce que User
n'a pas été défini quand usines.rb est en cours de chargement. J'ai emballé l'appel User.new
dans un bloc et il a résolu la question:
code Fixe:
FactoryGirl.define do
factory :user do
guid { User.new.send(:new_token) }
end
end
Note: probablement pas besoin d'appeler votre modèle comme ça, mais c'était une solution pour assécher mon code.
j'ai aussi eu cette erreur en lançant rspec:
Failure/Error: it { expect(subject.priority_list).to eq [nil] * 9 }
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "priorities" does not exist
LINE 5: WHERE a.attrelid = '"priorities"'::regclass
...
Il a été résolu pour moi, après j'ai couru
rake db:test:prepare
rake db:test:load
je rencontre cette erreur et sur ma recherche une des raisons pour PG relation d'erreur non définissable utilisateurs n'existe pas" erreur 151940920 " est.
cette erreur est une erreur de migration. Vous avez créé le nouveau modèle avec certains attributs de base de données. Après avoir créé model, vous devez migrer les attributs vers votre schéma d'application rails.
si vous utilisez une machine locale pour le développement, vous pouvez utiliser la commande
rake db:migrate
si vous utilisez heroku
heroku run rake db:migrate
ceci est souvent causé par un bug dans ActiveAdmin. Voici comment contourner le bug:
si vous utilisez ActiveAdmin, quelle que soit la table PG qui n'existe pas, commentez le contenu de ce fichier ActiveAdmin rb.
par exemple, pour ce cas PGError: ERROR: relation "users" does not exist
, commentez le contenu entier de app/admin/users.rb
, puis décommentez après que vous avez fait vos migrations.
ce problème pour moi était causé par des rails de fille D'usine. Je recommande à 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 en est la cause. Un rapide coup d'oeil à travers la fille de L'usine Rails gem GitHub repo m'a aidé à identifier le problème.
les usines étaient en panne parce que J'essayais d'instancier un modèle qui n'existait pas en courant! 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
end
encapsulant le tableau dans un bloc (ajoutant {}) a fait la correction 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)]}
reportez-vous à la Dynamique des Attributs d'une partie de l'Usine de Fille Rails docs pour plus d'info.
N'oubliez pas de renommer vos usines dossier de retour!
j'ai eu ce problème après que j'ai supprimé la table des utilisateurs. des solutions était en train de changer
change_table(:users)
à
create_table(:users)
j'ai eu une erreur similaire en essayant d'exécuter des tests avec rspec.
j'ai suivi les pas de Малъ Скрылевъ mais j'ai quand même fini court. La dernière étape que j'ai dû faire était de charger mon schéma dans ma base de données d'essai en utilisant:
RAILS_ENV=test rake db:schema:load
après cela, le problème a disparu et j'ai pu passer au bogue suivant. J'espère que ça vous donne une idée.
supprimer le dossier administrateur et lancer rake à nouveau.
::Migration[5.0]
il manquait dans migrations.
au lieu de lancer erreur de syntaxe il lance
PG:: Non définissable: ERREUR: Relation roles does not exist
après avoir perdu des heures, j'ai finalement compris que la migration était manquante. ::Migration[5.0]
.
Migration Erronée:
class CreateRoles < ActiveRecord # <---- Pay 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 fixe 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 des rails et pourrait aider quelqu'un, au lieu de lutter et de se poser des questions.
je faisais face au même problème et puis j'ai découvert la solution suivante.
assurez-vous d'avoir entré tous les justificatifs d'identité suivants dans la base de données.fichier yml et qu'ils sont corrects:
development:
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
la cause la plus probable est que votre râteau utilise un environnement différent de la base de données.yml de votre serveur.
(je sais que c'est vieux, mais pour les futurs googleurs)
utilisez-vous devise
? Je sais que spécifiquement omniauthable
est un problème, mais peut-être d'autres aussi. Mais pas forcément devise
. De façon générale, la solution consiste à commenter le modèle, la classe, n'importe quoi, et à supprimer les commentaires sur les sections que les erreurs demandent.
pour moi, ce qui se passait est que devise
lit le modèle User
pour voir ce que vous ont comme arguments pour devise
(la méthode de classe
c'est à dire devise :database_authenticatable, :registerable #etc
)
mais, il lira le dossier entier et si ce n'est pas un nouveau projet, il pourrait se déclencher par d'autres méthodes de classe en se basant sur d'autres choses (dans mon cas, c'était le friendly_id
gemme, et puis un alias_method
1519150920"
la réponse a été de commenter le modèle User
à l'exception des lignes devise
(s) * et rake db:schema:load
devrait fonctionner correctement.
-
sinon j'ai eu cette erreur:
ArgumentError: Cartographie omniauth_callbacks sur une ressource qui n'est pas omniauthable Veuillez ajouter
devise :omniauthable
auUser
modèle
j'ai eu ce problème et il s'est avéré être causé par API de raisin . J'ai remarqué dans la trace de la pile que le fichier des routes était lu pendant la migration.
dans routes.rb le Raisin api est monté
mount API::Base => '/'
et dans L'API étaient des références au modèle manquant. Ainsi, grâce à cette réponse Je l'ai mise dans un bloc qui détecte si elle est exécutée par le serveur ou pendant la migration.
unless ( File.basename("151910920") == "rake" && ARGV.include?("db:migrate") )
mount API::Base => '/'
end
et ça a marché.
dans mon cas, je devais commenter 2 ActiveAdmin
des dossiers. Voici mes pas:
- erreur Initiale/stacktrace (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 <top (required)>' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/app/admin/users.rb:1:in
" /Utilisateurs/matthewcampbell/Sites/code/pile-constructeurs/AchieveX/config/routes.rb: 3: dansblock in <top (required)>' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:1:in
" /Utilisateurs/matthewcampbell/Sites/code/pile-constructeurs/AchieveX/config/environment.rb:5: ` Tâches: TOP = > db:migrate = > environnement (Voir trace complète par tâches en cours d'exécution avec --trace)
j'ai commenté le app/admin/discussions.rb
fichier per la réponse D'Arcolye ci-dessus et essayé de migrer à nouveau ma base de données.
même erreur.
j'ai regardé le stacktrace un peu plus près, et j'ai remarqué qu'en fait app/admin/users.rb:25
lançait l'exception - et bien sûr, ce fichier a une dépendance sur ma table discussions
(via l'exécution Discussion.all
).
enfin, Commenter le contenu de users.rb
m'a permis de migrer avec succès ma base de données.
FYI: il y a une discussion ici dans ActiveAdmin
pour savoir si ce gem devrait charger la base de données Quand nécessaire.
donc j'ai le même problème que maintenant. N'oubliez pas de n'avoir qu'un seul modèle par migration. Qui a résolu pour moi.
j'ai fait l'erreur suivante et j'ai cherché dans tout mon code d'application pour type_zones
Je n'ai pas pu le trouver. J'ai aussi regardé le db et il a été mis à jour.
S'avère que c'était un fichier sous les fixtures /test/fixtures/type_zones.yml
qui causait le problème.
ERROR["test_should_get_new", UsersControllerTest, 0.47265757399145514]
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"
pour tous ceux qui ont encore ce problème, dans mon était mon usine en FactoryGirl qui a déclenché cette erreur.
j'essayais d'ajouter la référence via '.nouveau' ou '.créer".
j'ai été la capture de l'Erreur:
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "users" does not exist
LINE 8: WHERE a.attrelid = '"users"'::regclass
il s'est avéré être une solution très facile. J'avais copié des fichiers d'une version plus ancienne du projet et oublié de les insérer dans un dossier "migrate". Quand j'ai fait ça, ça a résolu le problème pour moi.