Ich sehe diese Frage schon vorher, aber nur für rspec. Ich bin noch nicht erschaffen, weil es für mich zu weit fortgeschritten ist, aber eines Tages werde ich es tun! : P
Ich erhalte diese Fehlermeldung, wenn ich versuche, mich mit meiner App anzumelden/einzuloggen. Ich bin mir nicht sicher, wo ich suchen muss, um das Problem zu beheben. Ich benutze devise, um meinen Benutzer zu erstellen, und auch omniauth2, um mich mit 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 rake db:migrate
ausprobiert, aber es ist bereits erstellt, in Schematabellen existieren Benutzer. Hat jemand diesen Fehler schon mal bekommen?
database.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:
Vielen Dank!
Zuerst müssen Sie alle Verbindungen von der Datenbank trennen. Standardmäßig verwenden Sie die Umgebung Entwicklung. Versuchen Sie dann, die Datenbank mit den folgenden Einstellungen zurückzusetzen:
rake db:reset
Der Rake-Befehl db: reset löscht die Datenbank und richtet sie erneut ein. Dies ist funktional gleichbedeutend mit Rake db: drop db: setup.
Dies ist nicht dasselbe wie das Ausführen aller Migrationen. Es wird nur die .__ verwendet. Inhalt der aktuellen schema.rb-Datei. Wenn eine Migration nicht rückgängig gemacht werden kann, rake db: reset kann dir nicht helfen. Weitere Informationen zum Dumping des Schemas finden Sie unter Abschnitt "Schema-Dumping und Sie". Rails Docs
Wenn der Trick nicht hilft, löschen Sie die Datenbank und erstellen Sie sie erneut. Migrieren Sie die Daten. Wenn Sie Samen haben, säen Sie die Datenbank:
rake db:drop db:create db:migrate db:seed
oder kurz (seit 3.2):
rake db:migrate:reset db:seed
Da db:migrate:reset
das Ablegen impliziert, erstellen und migrieren Sie die Datenbank. Da die Standardumgebung für rake
Entwicklung ist, sollten Sie, falls Sie die Ausnahme in den Spezifikationstests sehen, die Datenbank für die Umgebung test wie folgt neu erstellen:
Rails_ENV=test rake db:drop db:create db:migrate
oder indem Sie einfach das migrierte Schema laden:
Rails_ENV=test rake db:drop db:create db:schema:load
In den meisten Fällen wird die Testdatenbank während der Testprozeduren gesät, sodass die Taskaktion db:seed
nicht übergeben werden muss. Ansonsten müssen Sie die Datenbank vorbereiten (dies ist in Rails 4 veraltet):
rake db:test:prepare
und dann (wenn es tatsächlich benötigt wird):
Rails_ENV=test rake db:seed
Bei neueren Versionen von Rails kann der Fehler ActiveRecord :: NoEnvironmentInSchemaError erhöht werden. Stellen Sie daher den Tasks eine Task-Task für die Datenbankumgebung voran: db: environment: set:
Rails_ENV=test rake db:environment:set db:drop db:create db:migrate
Ihre Testdatenbank ist nicht für rspec bereit.
Bereiten Sie Ihre Testdatenbank für rspec vor, um diesen Fehler zu beheben
Rails_ENV=test rake test:prepare
Es werden Migrationen gelöscht, erstellt und Ihrer Testdatenbank hinzugefügt
Falls die Rake-Task mit einer Nachricht wie 'PG :: Error: ERROR: Datenbank "[Ihr_db_test]" abgebrochen wird, wird diese von anderen Benutzern ausgeführt
Rails_ENV=test rake db:migrate
Ich stoße auf diesen Fehler und nach meiner Recherche existiert einer der Grund für PG undefinedtable Fehlerrelation Benutzer nicht 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
rake db:migrate
Wenn Sie Heroku verwenden
heroku run rake db:migrate
Ich hatte einen ähnlichen Fehler. Der Grund meines Fehlers war, dass ich in meiner factories.rb-Datei einen Verweis auf ein Rails-Modell hatte. Es wurde also ein Fehler beim Laden verursacht. Das Update bestand darin, die Referenz in einen Block oder {}
zu packen, so dass die Ausführung verzögert wird.
Hier war der BROKEN Code:
FactoryGirl.define do
factory :user do
guid User.new.send(:new_token)
end
end
Und es war ein Fehler, weil User
beim Laden von factories.rb nicht definiert wurde. Ich habe den User.new
-Aufruf in einen Block gehüllt und das Problem wurde behoben:
Fester Code:
FactoryGirl.define do
factory :user do
guid { User.new.send(:new_token) }
end
end
Hinweis: Es ist wahrscheinlich nicht empfehlenswert, Ihr Modell so zu nennen, aber es war eine Lösung, um DRY meinen Code aufzurufen.
Beim Ausführen von rspec wurde auch diese Fehlermeldung angezeigt:
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
...
Es wurde für mich gelöst, nachdem ich gerannt war
rake db:test:prepare
rake db:test:load
Dies wird häufig durch einen Fehler in ActiveAdmin verursacht. So umgehen Sie den Fehler:
Wenn Sie ActiveAdmin verwenden, geben Sie an, welche Tabelle nicht vorhanden ist, und kommentieren Sie den Inhalt dieser ActiveAdmin-Rb-Datei aus.
Kommentieren Sie beispielsweise für diesen Fall PGError: ERROR: relation "users" does not exist
den gesamten Inhalt von app/admin/users.rb
aus und geben Sie das Kommentarzeichen aus, nachdem Sie die Migration durchgeführt haben.
Dieses Problem wurde für mich von Factory Girl Rails verursacht. Ich würde denjenigen, die es verwenden, empfehlen, den Ordner specs/factories in specs/temp umzubenennen und zu versuchen
Rails_ENV = your_environment bundle exec rake db: migrate --trace
Wenn es passiert, haben Sie gerade gefunden, was es verursacht hat. Eine schnelle Suche durch das Factory Girl Rails-Juwel Github Repo half mir, das Problem zu erkennen.
Die Fabriken scheiterten, weil ich versuchte, ein Modell zu instanziieren, das beim Ausführen nicht existierte! Codebeispiel unten:
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
Das Einkapseln des Arrays in einem Block (Hinzufügen von {}) beendete die Korrektur für mich. Beachten Sie, dass payment_options im Beispiel mehr als eine Zahlungsoption haben kann ...
payment_options {[Billing::PaymentOption.new(term: 1, payment_term: 1)]}
Weitere Informationen finden Sie im Abschnitt Dynamische Attribute der Factory Girl Rails-Dokumente .
Vergessen Sie nicht, Ihren Fabrikordner wieder umzubenennen!
::Migration[5.0]
fehlte in Migrationen . anstatt den Syntaxfehler zu werfen es wirft
PG :: UndefinedTable: ERROR: Beziehungsrollen sind nicht vorhanden
nachdem ich Stunden verschwendet hatte, stellte ich fest, dass die Migration fehlt::Migration[5.0]
.
Fehlerhafte Migration:
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
Feste und korrekte Migration
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
Dies könnte ein Fehler bei Rails sein und könnte jemandem helfen, anstatt zu kämpfen und sich zu fragen.
Ich hatte dieses Problem, nachdem ich die Benutzertabelle gelöscht hatte. Lösungen veränderten sich
change_table(:users)
zu
create_table(:users)
Ich stand vor demselben Problem und entdeckte die folgende Lösung.
Stellen Sie sicher, dass Sie alle folgenden Anmeldeinformationen in die Datei database.yml eingegeben haben und diese korrekt sind:
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
Beim Versuch, Tests mit rspec auszuführen, wurde ein ähnlicher Fehler angezeigt.
Ich folgte den Schritten von Малъ Скрылевъ, endete aber trotzdem knapp. Der letzte Schritt, den ich machen musste, war das Laden meines Schemas in meine Testdatenbank mit:
Rails_ENV=test rake db:schema:load
Danach ging das Problem weg und ich konnte mit dem nächsten Fehler fortfahren. Hoffentlich gibt Ihnen das einen Einblick.
Entfernen Sie den Admin-Ordner und führen Sie Rake erneut aus.
(Ich weiß, das ist alt, aber für zukünftige Googler)
Verwenden Sie devise
? Ich weiß, dass omniauthable
ein Problem ist, aber vielleicht auch andere. Es muss jedoch nicht devise
sein. Generell besteht die Lösung darin, das fehlerhafte Modell, die Klasse oder was auch immer auszufiltern und die Abschnitte zu kommentieren, für die die Fehler erforderlich sind.
Für mich ist Folgendes passiert: devise
liest das User
-Modell, um zu sehen, was Sie als Argumente für devise
haben (die Klassenmethode D.h. devise :database_authenticatable, :registerable #etc
)
Es wird jedoch die gesamte Datei gelesen, und wenn es sich nicht um ein neues Projekt handelt, kann dies durch andere Klassenmethoden ausgelöst werden, die auf andere Dinge angewiesen sind (in meinem Fall war es der friendly_id
gem und dann ein alias_method
Die Antwort bestand darin, das User
-Modell auszukommentieren, mit Ausnahme der devise
-Zeilen *, und rake db:schema:load
sollte einwandfrei laufen.
ansonsten habe ich diesen Fehler erhalten:
ArgumentError: Zuordnung von omniauth_callbacks auf eine Ressource, die nicht omniauthable ist Fügen Sie dem Modell User
devise :omniauthable
hinzu
Die wahrscheinlichste Ursache ist, dass Ihr Rake eine andere Umgebung als database.yml verwendet als Ihr Webserver.
Ich hatte dieses Problem und es stellte sich heraus, dass es von Grape API verursacht wurde. In der Stack-Ablaufverfolgung ist mir aufgefallen, dass die Routendatei während der Migration gelesen wurde.
In routen.rb ist das Trauben-API montiert
mount API::Base => '/'
Und in der API gab es Hinweise auf das fehlende Modell. Dank dieser Antwort habe ich es in einen Block gesetzt, der feststellt, ob er vom Server oder während der Migration läuft.
unless ( File.basename($0) == "rake" && ARGV.include?("db:migrate") )
mount API::Base => '/'
end
Und es hat funktioniert.
Also jetzt das gleiche Problem. Denken Sie daran, bei jeder Migration nur ein Modell zu verwenden. Das hat es für mich gelöst.
Wenn Sie diesen Fehler während der Migration erhalten, stellen Sie sicher, dass Ihr Modellname mehrere ist
z.B.
add_column :images, :url, :string
In meinem Fall musste ich 2ActiveAdmin
-Dateien auskommentieren. Hier waren meine Schritte:
Solr
für dieses Projekt):
⇒ 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
'/Benutzer/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb: 3: in block in <top (required)>'
/Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:1:in
' /Users/matthewcampbell/Sites/code/stackbuilder/AchieveX/config/environment.rb: 5: in `' Aufgaben: TOP => db: migrate => Umgebung (Siehe vollständige Ablaufverfolgung durch Ausführen einer Task mit --trace) </ code>
Ich änderte die app/admin/discussions.rb
-Datei per Arcolyes Antwort oben aus und versuchte erneut, meine Datenbank zu migrieren.
Gleicher Fehler.
Ich sah mir den Stacktrace etwas genauer an und bemerkte, dass app/admin/users.rb:25
die Ausnahme auslöste - und diese Datei hat tatsächlich eine Abhängigkeit von meiner discussions
-Tabelle (über das Ausführen von Discussion.all
).
Durch das Auskommentieren des Inhalts von users.rb
konnte ich schließlich meine Datenbank erfolgreich migrieren.
Zu Ihrer Information: Es gibt eine Diskussion hier in ActiveAdmin
, ob der Edelstein die Datenbank bei Bedarf laden soll.
Für alle, die dieses Problem immer noch hatten, war in meiner Fabrik in FactoryGirl der Fehler aufgetreten.
Ich habe versucht, einen Verweis über '.new' oder '.create' hinzuzufügen.
Ich habe den Fehler entdeckt:
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "users" does not exist
LINE 8: WHERE a.attrelid = '"users"'::regclass
Es stellte sich als eine sehr einfache Lösung heraus. Ich hatte Dateien von einer älteren Version des Projekts kopiert und vergessen, sie in einem "Migrate" -Ordner zu verschachteln. Als ich das tat, löste es das Problem für mich.
Ich hatte den folgenden Fehler und suchte in meinem gesamten Anwendungscode nach type_zones
nach. Ich konnte ihn nicht finden. Ich habe mir auch die DB angesehen und sie wurde aktualisiert.
Es stellte sich heraus, dass es sich um eine Datei unter Fixtures /test/fixtures/type_zones.yml
handelt, die den Fehler verursacht hat.
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"