2016-07-06 9 views
13

Opracowanie aplikacji Railsowej obsługującej tylko interfejs API do pobierania danych z interfejsu API, odfiltrowywania wielu pól, a następnie rozgłaszania pól, które chcemy upublicznić.ActiveRecord :: NoDatabaseError: lokalny użytkownik o identyfikatorze nie istnieje

Moja aplikacja normalnie zwracała dane, ale zdałem sobie sprawę, że na źródłowym poziomie API zmieniliśmy typ danych dla jednego z wyświetlanych pól danych. Aby to zrobić, wykonałem swoją pracę, sprawdziłem nowy oddział, przeprowadziłem migrację, aby zmienić typ danych w polu danych, zdecydowałem, że nie jestem zadowolony z jego działania, wycofałem migrację, zatwierdzono i wyewidencjonowałem główny oddział. Aplikacja zwraca dane w normalny sposób. Jednak teraz, gdy testuję rekordy mojego modelu w konsoli Rails przy użyciu metod wyszukiwania takich jak .first, .last itd., Otrzymuję błąd poniżej. Wcześniej pracowali dobrze.

Rozejrzałem się i nie widziałem żadnych wątków na temat tego konkretnego błędu (wszystkie wydają się zajmować wyszukiwaniem poszczególnych rekordów na stronie pokazu) - chociaż wątek this i this wydaje się być najbliższy. Sprawdzanie użytkowników na używanym db wskazuje, że identyfikator użytkownika ("501") w błędzie nie jest obecny.

Co zrobiłem i co muszę zrobić, aby móc ponownie wywołać metody wyszukiwania? Czy muszę utworzyć tego użytkownika, którego dotyczy odwołanie w błąd w moim db? (i dlaczego nie jest to domyślny użytkownik, z którego zawsze korzystam, aby połączyć się z moją bazą danych? Skąd się wziął ten identyfikator użytkownika w błędzie? Czy ma to znaczenie?)

ps - w przypadku, gdy jest to istotne, użyłem rake db:rollback aby przywrócić moją migrację zgodnie z wątkiem this.

Z góry dziękuję.

Szyny konsoli

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

Jestem zdecydowanie się moje rekordy - Idą do bazy danych:

Szyny 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 | {} 

z mojego schematu

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 

Moja 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 

Odpowiedz

2

Błąd nie jest powiązany z danymi biznesowymi. Patrząc na górne linie twojego logu ...

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' 

... jasne jest, że Railsy nie mogą się połączyć z bazą danych.

Podany użytkownik lokalny jest prawdopodobnie użytkownikiem systemu operacyjnego, który został skonfigurowany do uzyskiwania dostępu do bazy danych PostgreS, a jej rekord jest usuwany lub jest uszkodzony.

Spróbuj połączyć się z bazą danych za pomocą psql z konsoli i sprawdź, czy są jakieś problemy. Polecenie powinno wyglądać mniej więcej tak.

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

Od swojej username nie jest ustawiony w konfiguracji bazy danych, to prawdopodobnie pochodzi od zmiennej środowiskowej. Sprawdź, czy zawiera poprawną wartość.

+1

Bardzo pomocna. Mogłem uzyskać dostęp do bazy danych i tabel bez problemu, a dane tam były. Rails Server działał dobrze, ale nie mogłem uzyskać dostępu do bazy danych za pośrednictwem konsoli Rails. Biorąc udział w moim od [this] (http://stackoverflow.com/questions/33530287/when-i-try-to-do-do-rake-dbmigrate-i-get-anor-activerecordnoblubalerror), weszłam dodał 'username' i' password' dla mojej domyślnej nazwy użytkownika postgres i działa. Wygląda więc na to, że wszystko jest naprawione. Czy powinienem to zostawić, czy powinienem sięgnąć głębiej? pgAdmin3 wyświetla mojego domyślnego użytkownika jako właściciela każdego posiadanego przeze mnie db, a ja nie mam żadnych innych użytkowników ... – Mugshep

+0

W zależności od wymagań dotyczących konfiguracji możesz zostawić go tak, jak jest, to jest prawidłowe podejście. Jeśli musisz użyć swojego systemu, aby uzyskać dostęp do PostgreSQL i potrzebujesz szyn do automatycznego pobrania, to prawdopodobnie będziesz musiał trochę zagłębić się w zapisy użytkownika OS, aby to zrozumieć. –

45

To wydaje się być problemem sprężyny, a nie w bazie jeśli otrzymuję ten błąd:

/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) 

w szynach katalog główny wpisać:

spring stop

powinien powiedzieć:

Spring stopped.

, a migracja będzie działać później!

+0

Podobny problem został zamknięty jakiś czas temu na szynach/wiosna https://github.com/rails/spring/issues/125 – Dorian

4

Mam zamiar podzielić się tym, co sprawdziło się dla mnie, to brzmi jak żart, ale tak nie jest.

Włączam i wyłączam ponownie.

Chodzi mi o to, że zabiłem instancję Redis, która musi działać równolegle z moją instalacją, przechowywałem lokalne zmiany w gałęzi i próbowałem ponownie. I zadziałało!

Po tym, jak zabiłem tylko serwer Unicorn, wyskoczyłem ze schowka, aby przywrócić moje lokalne zmiany i wznowiłem działanie. I tak, to wciąż działało.

To nie ma żadnego sensu, wiem i przepraszam za brak lepszego wyjaśnienia.

Moim jedynym przypuszczeniem jest to, że mogłem utrzymać serwery Unicorn i Redis zbyt długo (nie pamiętam, kiedy ostatnio zamknąłem Maca) i coś mogło się popsuć. Gdyby tak było, ponowne uruchomienie całego stosu mogło być rozwiązaniem.

Mam nadzieję, że dzięki temu, drogi czytelniku, zaczniesz myśleć o tym tajemniczym błędzie.

+0

Nie mogę uwierzyć, że to zadziałało, dzięki! –

+0

Pracowałem! Zacząłem otrzymywać ten błąd na moim lokalnym komputerze po tym, jak zginął mój komputer. Właśnie zrobiłem restart i pozwoliłem, by zabił procesy z gracją i wszystko zaczęło działać poprawnie po ponownym uruchomieniu. – JLF

Powiązane problemy