eine API-only Rails-Anwendung Entwicklung von Daten aus einer API zu konsumieren, filtern, um eine Anzahl der Felder, und dann ausgestrahlt Felder wollen wir die Öffentlichkeit.Active :: NoDatabaseError: lokale Benutzer mit ID existiert nicht
Meine app zurückkehrt normalerweise Daten, aber ich erkennen, dass auf dem Quell API-Ebene, wir den Datentyp für eines der Felder von Daten geändert wir auszusetzen. Gerecht zu werden, beging ich meine Arbeit, ausgecheckt eine Niederlassung, lief ein Migrationen ein Datenfeld Datentyp zu ändern, entschied ich mich nicht zufrieden war, wie es funktionierte, rollte die Migration zurück, engagierte und auszuchecken den Master-Zweig. Die App gibt die Daten wie gewohnt zurück. Aber jetzt, wenn ich mein Modells Aufzeichnungen in Rails-Konsole mit Suchmethoden zu testen, wie .first
, .last
usw., erhalte ich den Fehler unten. Sie haben vorher gut gearbeitet.
Ich habe mich umgesehen und habe keine Threads zu diesem speziellen Fehler gesehen (sie scheinen sich damit zu beschäftigen, einzelne Datensätze für die Show-Seite zu finden) - obwohl this und this Thread (durch Erweiterung) am nächsten scheinen. Und das Überprüfen der Benutzer auf der Datenbank, die ich verwende, zeigt, dass die Benutzer-ID ("501") in dem Fehler nicht vorhanden ist.
Was habe ich getan, und was brauche ich, so zu tun, dass ich wieder finder Methoden aufrufen kann? Muss ich den Benutzer, auf den in dem Fehler in meiner Datenbank verwiesen wird, erstellen? (und warum ist es nicht der Standardbenutzer, den ich immer benutze, um mich mit meiner Datenbank zu verbinden? Woher kommt die Benutzerkennung?)
ps - falls es relevant ist, habe ich rake db:rollback
benutzt Rollback meiner Migration wie this Thread.
Vielen Dank im Voraus.
Rails-Konsole
.2.1 :001 > KoboApi.first
ActiveRecord::NoDatabaseError: local user with ID 501 does not exist
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:661:in `rescue in connect'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `connect'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:242:in `initialize'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-postgis-adapter-3.1.4/lib/active_record/connection_adapters/postgis_adapter.rb:51:in `initialize'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-postgis-adapter-3.1.4/lib/active_record/connection_adapters/postgis/create_connection.rb:37:in `new'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-postgis-adapter-3.1.4/lib/active_record/connection_adapters/postgis/create_connection.rb:37:in `postgis_connection'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:438:in `new_connection'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:448:in `checkout_new_connection'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in `acquire_connection'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:349:in `block in checkout'
from /Users/toby/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:348:in `checkout'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:263:in `block in connection'
from /Users/toby/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:262:in `connection'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:571:in `retrieve_connection'
... 13 levels...
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/commands/console.rb:9:in `start'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:68:in `console'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/commands.rb:17:in `<top (required)>'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `block in require'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in `load_dependency'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require'
from /Users/toby/code/projects/koboApi-broker/bin/rails:9:in `<top (required)>'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `load'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `block in load'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in `load_dependency'
from /Users/toby/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `load'
from /Users/toby/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /Users/toby/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
Ich bin auf jeden Fall meine Aufzeichnungen bekommen - sie sind in die Datenbank kommen:
Rails dbconsole
koboApi_development=# select * from kobo_apis limit 1;
id | lemurs_quantity | month_and_year | _geolocation | lemur_category | location_admin1 | location_admin2 | record_id | sighting_month | sighting_year
------+-----------------+----------------+--------------+----------------+-----------------+-----------------+-----------+----------------+---------------
1365 | 1 | | | I_dont_remembe | antsiranana | diana | 1234567 | no_response | 2013
(1 row)
koboApi_development=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
[user] | Superuser, Create role, Create DB, Replication | {}
von meinem Schema
ActiveRecord::Schema.define(version: 20160705203507) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
enable_extension "postgis"
create_table "kobo_apis", force: :cascade do |t|
t.integer "lemurs_quantity"
t.date "month_and_year"
t.text "_geolocation"
t.text "lemur_category"
t.string "location_admin1"
t.string "location_admin2"
t.integer "record_id"
t.string "sighting_month"
t.string "sighting_year"
end
create_table "my_spatial_table", force: :cascade do |t|
t.geography "polygon_data", limit: {:srid=>4326, :type=>"polygon", :geographic=>true}
end
end
Mein database.yml
development:
adapter: postgis
encoding: unicode
postgis_extension: postgis # default is postgis
postgis_schema: public # default is public
schema_search_path: public,postgis
database: koboApi_development
pool: 5
test:
adapter: postgresql
encoding: unicode
database: koboApi_test
pool: 5
production:
adapter: postgresql
encoding: unicode
database: koboApi_production
pool: 5
Sehr hilfreich. Ich konnte auf die db zugreifen und Tabellen kein Problem, und die Daten waren da drin. Rails Server funktionierte einwandfrei, aber ich konnte nicht über die Rails Console auf die Datenbank zugreifen. Nachdem ich meinen [http://stackoverflow.com/questions/33530287/when-iry-to-do-rake-dbmigrate-i-get-an-error-activerecordnodatabaseerror-) Eintrag hierher gebracht hatte, ging ich hinein und 'username' und' password' für meinen Standard postgres Benutzernamen hinzugefügt, und es funktioniert. Es scheint also alles in Ordnung zu sein. Soll ich es dabei belassen oder sollte ich tiefer graben? pgAdmin3 listet meinen Standardbenutzer als Besitzer von jeder Datenbank auf, die ich habe, und ich habe keine anderen Benutzer .... – Mugshep
Abhängig von Ihren Konfigurationsanforderungen können Sie es so lassen, wie es ist, es ist ein gültiger Ansatz. Wenn Sie Ihren Systembenutzer verwenden müssen, um auf postgres zuzugreifen, und Schienen benötigen, um ihn automatisch abzurufen, müssen Sie wahrscheinlich etwas in die Benutzerdatensätze des Betriebssystems einarbeiten, um es herauszufinden. –