2016-07-06 7 views
13

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 

Antwort

2

Der Fehler wird auf Ihre Geschäftsdaten nicht verwandt. Schauen Sie sich die obersten Zeilen Ihres Protokolls an ...

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' 

... es ist klar, dass Rails keine Verbindung zur Datenbank herstellen kann.

Der erwähnte lokale Benutzer ist wahrscheinlich ein Betriebssystembenutzer, der für den Zugriff auf die Postgres-Datenbank konfiguriert wurde und dessen Datensatz entweder gelöscht oder beschädigt ist.

Versuchen Sie, eine Verbindung zu Ihrer Datenbank herzustellen, indem Sie psql von Konsole verwenden, und sehen Sie, ob es Probleme gibt. Der Befehl sollte ungefähr so ​​aussehen.

psql --host=localhost --port=5432 --username=<your postgres user> --password --dbname=koboApi_development 

Da Ihre username in Ihrer Datenbank Config nicht festgelegt, es stammt wahrscheinlich aus einer Umgebungsvariablen. Überprüfen Sie, ob es den richtigen Wert enthält.

+1

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

+0

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. –

45

Es scheint Spring Problem, nicht die Datenbank, wenn Sie bekommen diese Fehler zu sein: sagen

spring stop

soll:

/Users/yad/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.6/lib/active_record/connection_adapters/postgresql_adapter.rb:661:in `rescue in connect': local user with ID 501 does not exist 
(ActiveRecord::NoDatabaseError) 

in den Schienen Stammverzeichnis eingeben

Spring stopped.

und die Migration wird danach funktionieren!

+0

Ein ähnliches Problem wurde vor einer Weile auf Schienen/Frühjahr geschlossen https://github.com/rails/spring/issues/125 – Dorian

4

Ich werde teilen, was für mich funktionierte, es klingt wie ein Witz, aber es ist nicht.

Ich habe es wieder ein- und ausgeschaltet.

Was ich damit meine ist, dass ich die Redis-Instanz, die parallel zu meinem Setup ausgeführt werden muss, getötet, die lokalen Änderungen auf dem Zweig gespeichert und erneut versucht habe. Und es hat funktioniert!

Danach habe ich nur den Unicorn-Server getötet, den Stash freigegeben, um meine lokalen Änderungen wiederherzustellen, und neu gestartet. Und ja, es hat immer noch funktioniert.

Das macht keinen Sinn, ich weiß und ich entschuldige mich dafür, dass ich keine bessere Erklärung habe.

Meine einzige Vermutung ist, dass ich die Unicorn und Redis Server zu lange laufen lassen hätte (ich kann mich nicht erinnern, als ich meinen Mac zum letzten Mal heruntergefahren habe) und irgendwas könnte durcheinander geraten sein. Wenn dies der Fall wäre, hätte das Neustarten des gesamten Stapels die Lösung sein können.

Hoffen, dass Sie, liebe Leser, Denkanstöße zu diesem mysteriösen Fehler bekommen.

+0

Kann nicht glauben, dass das tatsächlich funktioniert, danke! –

+0

Arbeitete! Ich fing an, diesen Fehler auf meinem lokalen zu bekommen, nachdem mein Computer gestorben ist. Ich habe gerade einen Neustart durchgeführt und Prozesse ordnungsgemäß beenden lassen, und alles wurde ordnungsgemäß gestartet, als es wieder hochgefahren wurde. – JLF