Ich habe diese Frage schon einmal gesehen, aber nur für rspec. Ich habe noch keinen Test erstellt, weil er für mich zu fortgeschritten ist, aber eines Tages werde ich es tun! : P.
Ich erhalte diese Fehlermeldung, wenn ich versuche, mich in meiner App anzumelden. Ich habe devise verwendet, um Benutzer zu erstellen, und omniauth2 , um mich bei Google anzumelden .
Das ist der Fehler
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
Ich habe es versucht rake db:migrate
, aber es ist bereits erstellt: In der Schematabelle sind Benutzer vorhanden. Hat jemand diesen Fehler schon einmal?
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
arbeitete für mich.Antworten:
Zunächst müssen Sie alle Verbindungen aus der Datenbank trennen. Standardmäßig verwenden Sie die Entwicklungsumgebung . Versuchen Sie dann, die Datenbank wie folgt zurückzusetzen:
Wenn der Trick nicht hilft, löschen Sie die Datenbank, erstellen Sie sie erneut, migrieren Sie die Daten und säen Sie die Datenbank, wenn Sie Seeds haben:
oder kurz gesagt (seit 3.2):
Da
db:migrate:reset
dies das Löschen impliziert, erstellen und migrieren Sie die Datenbank. Da die Standardumgebung fürrake
ist die Entwicklung , für den Fall , wenn Sie die Ausnahme in spec Tests zu sehen, sollten Sie für die neu erstellen db Testumgebung wie folgt:oder indem Sie einfach das migrierte Schema laden:
In den meisten Fällen wird die Testdatenbank während der Testprozeduren gesät, sodass
db:seed
keine Aufgabenaktion übergeben werden muss. Andernfalls müssen Sie die Datenbank vorbereiten (dies ist in Rails 4 veraltet ):und dann (wenn es tatsächlich benötigt wird):
In neueren Versionen von Rails kann der Fehler ActiveRecord :: NoEnvironmentInSchemaError auftreten. Stellen Sie den Aufgaben also einfach eine Datenbankumgebung voran. Set task: db: environment: set :
quelle
rake db:test:prepare
macht den Job.rake db:reset
. Die Magie passiert Mann!Ich bin auf diesen Fehler gestoßen und habe bei meinen Nachforschungen herausgefunden, dass einer der Gründe für Benutzer mit nicht definierbaren PG-Fehlerbeziehungen nicht existiert Fehler ist:
Dieser Fehler ist ein Migrationsfehler. Möglicherweise haben Sie ein neues Modell mit einigen Datenbankattributen erstellt. Nach dem Erstellen des Modells müssen Sie Attribute in Ihr Rails-App-Schema migrieren.
Wenn Sie einen lokalen Computer für die Entwicklung verwenden, können Sie den Befehl verwenden
Wenn Sie Heroku verwenden
quelle
rake db:migrate
. Vielen Dank.Ihre Testdatenbank ist nicht bereit für rspec.
Bereiten Sie Ihre Testdatenbank für rspec vor, um diesen Fehler zu beheben
Es werden Migrationen gelöscht, erstellt und zu Ihrer Testdatenbank hinzugefügt
Falls die Rake-Task mit der Meldung 'PG :: Error: ERROR: Datenbank "[your_db_test]" abgebrochen wird, auf die andere Benutzer zugreifen, führen Sie diese aus
quelle
Ich hatte einen ähnlichen Fehler. Die Wurzel meines Fehlers war, dass ich in meiner factories.rb-Datei einen Verweis auf ein Rails-Modell hatte. Es verursachte also ein Ladefehlerproblem. Das Update bestand darin, die Referenz in einen Block oder zu verpacken
{}
, damit die Ausführung verzögert wird.Hier war der BROKEN-Code:
Und es war fehlerhaft, weil
User
nicht definiert wurde, wann factories.rb geladen wurde. Ich habe denUser.new
Anruf in einen Block eingeschlossen und das Problem wurde behoben:Fester Code:
Hinweis: Es ist wahrscheinlich nicht die beste Vorgehensweise, Ihr Modell so aufrufen zu müssen, aber es war eine Lösung, um meinen Code auszutrocknen.
quelle
Ich habe diesen Fehler auch beim Ausführen von rspec erhalten:
Es wurde für mich gelöst, nachdem ich gelaufen bin
quelle
Dies wird häufig durch einen Fehler in ActiveAdmin verursacht. So umgehen Sie den Fehler:
Wenn Sie ActiveAdmin verwenden, kommentieren Sie den Inhalt dieser ActiveAdmin-RB-Datei aus, je nachdem, welche Tabelle PG als nicht vorhanden bezeichnet.
PGError: ERROR: relation "users" does not exist
Kommentieren Sie in diesem Fall beispielsweise den gesamten Inhalt von aus und kommentieren Sie ihn ausapp/admin/users.rb
, nachdem Sie Ihre Migrationen durchgeführt haben.quelle
Dieses Problem wurde für mich durch Factory Girl-Schienen verursacht. Ich würde denjenigen, die es verwenden, empfehlen, den Ordner specs / factories in specs / temp umzubenennen und es zu versuchen
RAILS_ENV = your_environment bundle exec rake db: migrate --trace
Wenn es vorbei ist, haben Sie gerade herausgefunden, was es verursacht hat. Ein kurzer Blick durch das Gem Github Repo von Factory Girl Rails half mir, das Problem zu identifizieren.
Die Fabriken versagten, weil ich versuchte, ein Modell zu instanziieren, das beim Laufen nicht existierte! Codebeispiel unten:
Das Einkapseln des Arrays in einen Block (Hinzufügen von {}) hat das Problem für mich behoben. Beachten Sie, dass Zahlungsoptionen im Beispiel mehr als eine Zahlungsoption annehmen können ...
Weitere Informationen finden Sie im Abschnitt Dynamische Attribute in den Factory Girl Rails-Dokumenten .
Vergessen Sie nicht, Ihren Fabrikordner wieder umzubenennen!
quelle
Ich hatte das gleiche Problem und entdeckte dann die folgende Lösung.
Stellen Sie sicher, dass Sie alle folgenden Anmeldeinformationen in die Datei database.yml eingegeben haben und diese korrekt sind:
quelle
Ich hatte dieses Problem, nachdem ich die Benutzertabelle gelöscht hatte. Lösungen änderten sich
zu
quelle
::Migration[5.0]
fehlte bei Migrationen. Anstatt einen Syntaxfehler auszulösen, wird ein Fehler ausgelöstNachdem ich Stunden verschwendet hatte, stellte ich endlich fest, dass die Migration fehlt
::Migration[5.0]
.Fehlerhafte Migration:
Feste und korrekte Migration
Dies könnte ein Fehler mit Schienen sein und jemandem helfen, anstatt zu kämpfen und sich zu wundern.
quelle
Beim Versuch, Tests mit rspec auszuführen, wurde ein ähnlicher Fehler angezeigt.
Ich folgte den Schritten von Малъ Скрылевъ, endete aber immer noch kurz. Der letzte Schritt, den ich tun musste, war das Laden meines Schemas in meine Testdatenbank mit:
RAILS_ENV=test rake db:schema:load
Danach verschwand das Problem und ich konnte mit dem nächsten Fehler fortfahren. Hoffentlich gibt Ihnen das einen Einblick.
quelle
Entfernen Sie den Admin-Ordner und führen Sie Rake erneut aus.
quelle
(Ich weiß, das ist alt, aber für zukünftige Googler)
Benutzt du
devise
? Ich weiß, dass dies speziellomniauthable
ein Problem ist, aber vielleicht auch andere. Das muss nicht seindevise
. Im Allgemeinen besteht die Lösung darin, das fehlerhafte Modell, die betreffende Klasse usw. auskommentieren und alle Abschnitte, nach denen die Fehler fragen, auskommentieren.Für mich geschah das
devise
Lesen desUser
Modells, um zu sehen, wofür Sie Argumente habendevise
(die Klassenmethode, dhdevise :database_authenticatable, :registerable #etc
)Es wird jedoch die gesamte Datei gelesen, und wenn dies kein neues Projekt ist, wird es möglicherweise von anderen Klassenmethoden ausgelöst, die sich auf andere Dinge stützen (in meinem Fall war es das
friendly_id
Juwel und dann einalias_method
Die Antwort war, das
User
Modell mit Ausnahme derdevise
Zeilen *rake db:schema:load
auskommentieren und sollte gut laufen.Ansonsten habe ich diesen Fehler bekommen:
ArgumentError: Zuordnung von omniauth_callbacks zu einer Ressource, die nicht omniauthable ist Bitte fügen Sie
devise :omniauthable
demUser
Modell hinzuquelle
Wenn Sie diesen Fehler während der Migration erhalten, stellen Sie sicher, dass Ihr Modellname Plural ist
z.B.
quelle
Die wahrscheinlichste Ursache ist, dass Ihr Rake eine andere Umgebung als database.yml verwendet als Ihr Webserver.
quelle
Ich hatte dieses Problem und es stellte sich heraus, dass es durch die Trauben-API verursacht wurde . Ich habe im Stack-Trace festgestellt, dass die Routendatei während der Migration gelesen wurde.
In route.rb ist die Trauben-API montiert
Und in der API befanden sich Verweise auf das fehlende Modell. Dank dieser Antwort habe ich sie in einen Block eingefügt, der erkennt, ob sie vom Server oder während der Migration ausgeführt wird.
Und es hat funktioniert.
quelle
Ich hatte den folgenden Fehler und habe meinen gesamten Anwendungscode nachgeschlagen, da
type_zones
ich ihn nicht finden konnte. Ich habe mir auch die Datenbank angesehen und sie wurde aktualisiert.Es stellte sich heraus, dass es sich um eine Datei unter den Geräten handelte
/test/fixtures/type_zones.yml
, die das Problem verursachte.quelle
Für alle, die immer noch dieses Problem haben, war es in meinem Fall meine Fabrik in FactoryGirl, die diesen Fehler auslöste.
Ich habe versucht, eine Referenz über '.new' oder '.create' hinzuzufügen.
quelle
In meinem Fall musste ich 2
ActiveAdmin
Dateien auskommentieren. Hier waren meine Schritte:Solr
für dieses Projekt verwenden):⇒ 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)Ich habe die
app/admin/discussions.rb
Datei gemäß der obigen Antwort von Arcolye auskommentiert und versucht, meine Datenbank erneut zu migrieren.Gleicher Fehler.
Ich habe mir den Stacktrace etwas genauer angesehen und festgestellt, dass tatsächlich
app/admin/users.rb:25
die Ausnahme ausgelöst wurde - und tatsächlich hat diese Datei eine Abhängigkeit von meinerdiscussions
Tabelle (über die Ausführung)Discussion.all
).Durch das Auskommentieren des Inhalts von
users.rb
konnte ich meine Datenbank schließlich erfolgreich migrieren.Zu Ihrer Information: Es gibt eine Diskussion hier in
ActiveAdmin
etwa , ob das Juwel die Datenbank geladen werden soll , wenn erforderlich.quelle
Also gerade jetzt das gleiche Problem haben. Denken Sie daran, in jeder Migration nur ein Modell zu haben. Das hat es für mich gelöst.
Ich bin hier auf die Antwort gestoßen.
quelle
Ich habe den Fehler abgefangen:
Es stellte sich heraus, dass es eine super einfache Lösung war. Ich hatte Dateien aus einer älteren Version des Projekts kopiert und vergessen, sie in einem "Migrations" -Ordner zu verschachteln. Als ich das tat, löste es das Problem für mich.
quelle
Dies kann normalerweise passieren, wenn Sie eine falsche Art der Zuordnung zwischen Modellen verwenden, auf Abhängigkeitszerstörung prüfen und has_many-Zuordnungen haben, zum Beispiel:
Falscher Weg, der dieses Problem verursachen kann:
article.rb
Unterkategorie.rb
richtiger Weg:
article.rb
Unterkategorie.rb
quelle