Arbeiten an einem kleinen Ruby-Skript zum Erstellen und Speichern von Daten in einer Postgres-Datenbank. Die App funktioniert problemlos, wenn es um das Erstellen und Löschen der Datenbank oder das Ausführen von Migrationen geht. Es schlägt jedoch fehl, wenn ich versuche, rake db:seed
auszuführen. Die Fehlermeldung zeigt an, dass die Tabelle nicht existiert ... aber in der Zwischenzeit, wenn ich das gleiche SQL-Skript in der Fehlermeldung referenziert, aber in pgAdmin, gibt es gültige Ergebnisse zurück. Ich frage mich, ob etwas mit den Privilegien geschieht, die dem Benutzer gewährt werden, der in der database.yml
genannt wird, und wenn ja, wie würde ich das im Skript adressieren? Jede Hilfe, die dies versteht, wäre willkommen. HierRuby/Postgres ActiveRecord ohne Rails: Undefinierte Tabelle FEHLER: Relation "..." existiert nicht
ist die Fehlermeldung ich im Terminal bekommen:
acmecorp$ rake db:seed
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "applications" does not exist
LINE 8: WHERE a.attrelid = '"applications"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
c.collname, col_description(a.attrelid, a.attnum) AS comment
FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
LEFT JOIN pg_type t ON a.atttypid = t.oid
LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
WHERE a.attrelid = '"applications"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
/Users/thisguy/repositories/acmecorp/db/seeds.rb:1:in `<top (required)>'
/Users/thisguy/repositories/acmecorp/rakefile.rb:30:in `require_relative'
/Users/thisguy/repositories/acmecorp/rakefile.rb:30:in `block (2 levels) in <top (required)>'
Caused by:
PG::UndefinedTable: ERROR: relation "applications" does not exist
LINE 8: WHERE a.attrelid = '"applications"'::regclass
^
/Users/thisguy/repositories/acmecorp/db/seeds.rb:1:in `<top (required)>'
/Users/thisguy/repositories/acmecorp/rakefile.rb:30:in `require_relative'
/Users/thisguy/repositories/acmecorp/rakefile.rb:30:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)
Meine database.yml Datei:
# config/database.yml
default: &default
host: 'localhost'
adapter: 'postgresql'
encoding: utf-8
development:
<<: *default
database: 'acmecorp_dev'
username: 'acmecorpapp'
Die Gemfile ist ziemlich einfach:
# Gemfile
source 'https://rubygems.org'
gem 'activerecord'
gem 'require_all'
gem 'pg'
Ich habe eine rakefile.rb, um die verschiedenen Aufgaben zu steuern (bearbeitet, um irrelevante Elemente zu entfernen):
Wie bereits erwähnt, funktionieren alle anderen Aufgaben in der Rakefile ohne Problem - es ist nur die :seed
Aufgabe, die rülpst. Ich bin ziemlich sicher, dass es etwas damit zu tun hat, wie das Skript mit der Datenbank interagiert. Hier
ist die Seed-Datei:
# db/seeds.rb
Application.create({
ApplicationNumber: 1,
AccountNumber: 1234,
ApplVer: 1,
CreateDateTime: "1/2/2018",
ExpirationDateTime: "1/5/2019",
ApplicationStatus: "In process",
ApprovedAmount: 1992.92,
AcceptedAmount: 92.92,
HomeAddressLine1: "1 Main Street",
HomeAddressLine2: "",
HomeAddressCity: "Thibodaux",
HomeAddressState: "LA",
HomeAddressZipCode: "12345"
})
und schließlich, ich habe ein einfaches Modell für die Anwendung, die die seeds.rb Dateiverweise:
# models/application.rb
class Application < ActiveRecord::Base
end
Nun ist die Fehlermeldung oben erwähnt gibt an, dass "relation" -Anwendungen "nicht existiert" ... aber wenn ich den gleichen SQL in der Nachricht zitiert, direkt in pgAdmin, hier ist, was ich bekomme (Entschuldigung für die Formatierung - konnte nicht herausfinden, wie Sie es bekommen eine Tabelle effizient):
attname|format_type|pg_get_expr|attnotnull|atttypid|atttypmod|collname|comment
id|integer|nextval('applications_id_seq'::regclass)|t|23|-1||
ApplicationNumber|integer||f|23|-1||
AccountNumber|integer||f|23|-1||
ApplVer|integer||f|23|-1||
CreateDateTime|timestamp without time zone||f|1114|-1||
ExpirationDateTime|timestamp without time zone||f|1114|-1||
ApplicationStatus|character varying||f|1043|-1||
ApprovedAmount|numeric||f|1700|-1||
AcceptedAmount|numeric||f|1700|-1||
HomeAddressLine1|character varying||f|1043|-1||
HomeAddressLine2|character varying||f|1043|-1||
HomeAddressCity|character varying||f|1043|-1||
HomeAddressState|character varying||f|1043|-1||
HomeAddressZipCode|character varying||f|1043|-1||
FileCreatedDate|timestamp without time zone||f|1114|-1||
created_at|timestamp without time zone||t|1114|-1||
updated_at|timestamp without time zone||t|1114|-1||
Unterm Strich also scheint zu sein: - zumindest so weit wie das Erstellen, Löschen und Migration von Datenbanken - - das Script mit PG arbeiten konfiguriert ist, die rake db:seed
Aufgabe versagt - das berichtet SQL in die Fehlermeldung in der Befehlszeile funktioniert gut, wenn es durch pgAdmin
Ich bin mir nicht sicher, warum das Problem. Könnte es etwas mit Privilegien zu tun haben, die für den Benutzer verfügbar sind, der der Datenbank in der database.yml
.. zugewiesen wurde?
könnte es sein, waren Sie als acmecorpapp angemeldet, wenn Sie die SQL selbst ausgeführt haben? –