J'ai vu cette question avant, mais uniquement pour rspec. Je n'ai pas encore créé de test car il est trop avancé pour moi mais un jour bientôt je le ferai! : P
J'obtiens cette erreur lorsque j'essaye de m'inscrire / me connecter à mon application. J'ai utilisé la conception pour créer l'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 de schéma, les utilisateurs existent. Quelqu'un a-t-il déjà eu cette erreur?
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:
RAILS_ENV=test rake db:migrate
travaillé pour moi.Réponses:
Dans un premier temps, vous devez détacher toutes les connexions de la base de données. Par défaut, vous utilisez l' environnement de développement . Essayez ensuite de réinitialiser la base de données avec ce qui suit:
Si l'astuce ne vous 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:
ou en bref (depuis 3.2):
Depuis
db:migrate:reset
implique de supprimer, créer et migrer le fichier db. Étant donné que l'environnement par défaut pourrake
est le développement , au cas où vous voyez l'exception dans les tests de spécification, vous devez recréer la base de données pour l' environnement de test comme suit:ou en chargeant simplement le schéma migré:
Dans la plupart des cas, la base de données de test est ensemencée pendant les procédures de test, il
db:seed
n'est donc pas nécessaire que l'action de la tâche soit réussie. Sinon, vous devez préparer la base de données (ceci est obsolète dans Rails 4 ):et puis (si c'est réellement nécessaire):
Sur les versions plus récentes de Rails, l'erreur ActiveRecord :: NoEnvironmentInSchemaError peut être augmentée, alors ajoutez simplement les tâches avec une tâche de jeu d'environnement de base de données: db: environment: set :
la source
rake db:test:prepare
Fait le travail.rake db:reset
. La magie arrive mec!J'ai rencontré cette erreur et, lors de mes recherches, j'ai découvert que l'une des raisons pour lesquelles les utilisateurs de relation d'erreur PG undefinedtable n'existe pas est:
Cette erreur est une erreur de migration. Vous avez peut-être créé un nouveau modèle avec certains attributs de base de données. Après avoir créé le modèle, vous devez migrer les attributs vers le schéma de votre application rails.
Si vous utilisez une machine locale, pour le développement, vous pouvez utiliser la commande
Si vous utilisez heroku
la source
rake db:migrate
. Merci.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
Il supprimera, créera et ajoutera des migrations à votre base de données de test
Dans le cas où la tâche rake est abandonnée avec un message comme 'PG :: Error: ERROR: la base de données "[your_db_test]" est accédée par d'autres utilisateurs, exécutez celle-ci
la source
J'ai eu une erreur similaire. La racine de mon erreur était que j'avais une référence à un modèle Rails dans mon fichier factories.rb. Cela a donc causé un problème d'erreur de chargement. Le correctif consistait à envelopper la référence dans un bloc ou
{}
à retarder son exécution.Voici le code BROKEN:
Et c'était une erreur car elle
User
n'était pas définie lorsque factories.rb était en cours de chargement. J'ai enveloppé l'User.new
appel dans un bloc et cela a résolu le problème:Code fixe:
Remarque: ce n'est probablement pas la meilleure pratique pour appeler votre modèle comme ça, mais c'était une solution pour DRY mon code.
la source
J'obtenais également cette erreur lors de l'exécution de rspec:
C'était résolu pour moi après avoir couru
la source
Ceci est souvent causé par un bogue dans ActiveAdmin. Voici comment contourner le bogue:
Si vous utilisez ActiveAdmin, quelle que soit la table selon PG qui n'existe pas, mettez en commentaire le contenu de ce fichier rb ActiveAdmin.
Par exemple, dans ce cas
PGError: ERROR: relation "users" does not exist
, commentez l'intégralité du contenu deapp/admin/users.rb
, puis décommentez après avoir effectué vos migrations.la source
Ce problème pour moi était causé par les rails Factory Girl. Je recommanderais à ceux qui l'utilisent de renommer le dossier specs / factories en specs / temp et d'essayer
RAILS_ENV = your_environment bundle exec rake db: migrate --trace
Si cela réussit, vous venez de trouver ce qui en était la cause. Une fouille rapide dans le dépôt github de gemmes Factory Girl Rails m'a aidé à identifier le problème.
Les usines échouaient parce que j'essayais d'instancier un modèle qui n'existait pas lors de l'exécution! Exemple de code ci-dessous:
Encapsuler le tableau dans un bloc (ajouter {}) a fait le correctif pour moi. Notez que payment_options peut prendre plus d'une option de paiement dans l'exemple ...
Reportez-vous à la partie Attributs dynamiques de la documentation Factory Girl Rails pour plus d'informations.
N'oubliez pas de renommer votre dossier usines!
la source
J'étais confronté au même problème et j'ai découvert la solution suivante.
Assurez-vous que vous avez entré toutes les informations d'identification suivantes dans le fichier database.yml et qu'elles sont correctes:
la source
J'ai eu ce problème après avoir supprimé la table des utilisateurs. les solutions changeaient
à
la source
::Migration[5.0]
manquait dans les migrations. au lieu de lancer une erreur de syntaxe, il lèveaprès avoir perdu des heures, j'ai finalement compris que la migration était manquante
::Migration[5.0]
.Migration erronée:
Migration corrigée et correcte
Cela pourrait être un bug avec des rails et pourrait aider quelqu'un, au lieu de se débattre et de s'interroger.
la source
J'obtenais une erreur similaire en essayant d'exécuter des tests à l'aide de rspec.
J'ai suivi les pas de Малъ Скрылевъ mais j'ai quand même échoué. La dernière étape que je devais 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 bogue suivant. J'espère que cela vous donne un aperçu.
la source
Supprimez le dossier Admin et exécutez à nouveau rake.
la source
(Je sais que c'est vieux, mais pour les futurs googleurs)
Utilisez-vous
devise
? Je sais précisément queomniauthable
c'est un problème, mais peut-être d'autres aussi. Cela n'a pas à l'êtredevise
cependant. De manière générale, la solution consiste à mettre en commentaire le modèle, la classe, etc., et à annuler les commentaires des sections demandées par les erreurs.Pour moi, ce qui se passait est de
devise
lire leUser
modèle pour voir ce que vous avez comme argumentsdevise
(la méthode de classe iedevise :database_authenticatable, :registerable #etc
)Mais, il lira tout le fichier et s'il ne s'agit pas d'un nouveau projet, il pourrait être déclenché par d'autres méthodes de classe reposant sur d'autres choses (dans mon cas, c'était le
friendly_id
joyau, puis unalias_method
La réponse a été de commenter le
User
modèle à l'exception desdevise
lignes * etrake db:schema:load
devrait fonctionner correctement.sinon j'ai eu cette erreur:
ArgumentError: Mappage de omniauth_callbacks sur une ressource qui n'est pas omniauthable Veuillez ajouter
devise :omniauthable
auUser
modèlela source
Si vous obtenez cette erreur lors de la migration, assurez-vous que le nom de votre modèle est au pluriel
par exemple.
la source
La cause la plus probable est que votre rake utilise un environnement différent de database.yml que votre serveur Web.
la source
J'ai eu ce problème et il s'est avéré être causé par l'API Grape . J'ai remarqué dans la trace de pile que le fichier de routes était en cours de lecture pendant la migration.
Dans routes.rb, l'API Grape est montée
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.
Et ça a marché.
la source
J'avais l'erreur suivante et faisais une recherche dans tout mon code d'application car
type_zones
je ne pouvais pas le trouver. J'ai également regardé la base de données et elle a été mise à jour.Il s'avère que c'était un fichier sous les appareils
/test/fixtures/type_zones.yml
qui causait le problème.la source
Pour tous ceux qui ont encore ce problème, dans mon cas, c'est mon usine dans FactoryGirl qui a déclenché cette erreur.
J'essayais d'ajouter une référence via «.new» ou «.create».
la source
Dans mon cas, j'ai dû commenter 2
ActiveAdmin
fichiers. Voici mes étapes: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
' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:3:inblock in <top (required)>' /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
app/admin/discussions.rb
fichier 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é le stacktrace d'un peu plus près et j'ai remarqué qu'en fait, je lançais
app/admin/users.rb:25
l'exception - et bien sûr, ce fichier a une dépendance sur madiscussions
table (via l'exécutionDiscussion.all
).Enfin, commenter le contenu de
users.rb
m'a permis de migrer ma base de données avec succès.Pour votre information: il y a une discussion ici à
ActiveAdmin
savoir si ce petit bijou devrait charger la base de données en cas de besoin.la source
Donc avoir le même problème tout à l'heure. N'oubliez pas de n'avoir qu'un seul modèle dans chaque migration. Cela a résolu le problème pour moi.
Je suis tombé sur la réponse ici.
la source
J'attrapais l'erreur:
Cela s'est avéré être une solution très simple. J'avais copié des fichiers d'une ancienne version du projet et j'avais oublié de les imbriquer dans un dossier «migrer». Quand j'ai fait cela, cela a résolu le problème pour moi.
la source
cela peut généralement se produire lorsque vous utilisez un type d'association incorrect 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
subcategory.rb
La bonne façon:
article.rb
subcategory.rb
la source