2016-07-06 2 views
13

Разработка приложения Rails для API, предназначенного для использования данных API, отфильтровывает ряд полей, а затем передает поля, которые мы хотим публиковать.ActiveRecord :: NoDatabaseError: локальный пользователь с идентификатором не существует

Мое приложение обычно возвращало данные, но я понял, что на уровне исходного API мы изменили тип данных для одного из полей данных, которые мы публикуем. Чтобы учесть, я совершил свою работу, проверил новую ветвь, проверил миграцию, чтобы изменить тип данных поля данных, решил, что меня не устраивает работа, откат миграции, передача и проверка основной ветви. Приложение возвращает данные как обычно. Однако теперь, когда я тестирую записи моей модели в Rails Console с помощью методов поиска, таких как .first, .last и т. Д., Я получаю ошибку ниже. Раньше они работали нормально.

Я осмотрел и не видел ни одной темы этой конкретной ошибки (все они, похоже, имеют дело с поиском отдельных записей для страницы показа), хотя this и this нить (по расширению) кажется ближайшей. И, проверяя пользователей на используемом db, показано, что идентификатор пользователя («501») в ошибке отсутствует.

Что я сделал и что мне нужно сделать, чтобы снова вызвать методы поиска? Нужно ли мне создавать этого пользователя, ссылающегося на ошибку в моем db? (и почему это не пользователь по умолчанию, который я всегда использую для подключения к моему db? Откуда появился этот идентификатор пользователя в ошибке?)

ps - в случае, если это применимо, я использовал rake db:rollback откат моей миграции по this нить.

Заранее спасибо.

Rails консоли

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

Я определенно получаю мои записи - они идут в базу данных:

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

из моей схемы

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 

Мой 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 

ответ

2

ошибка не связана с бизнес-данных. Посмотрите на верхние строчки вашего журнала ...

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' 

... ясно, что Rails не может подключиться к базе данных.

Локальный пользователь, вероятно, является пользователем ОС, который был настроен для доступа к базе данных postgres, и его запись либо удалена, либо повреждена.

Попробуйте подключиться к вашей базе данных с помощью psql с консоли и посмотреть, есть ли проблемы. Команда должна выглядеть примерно так.

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

Поскольку ваш username не установлен в вашей конфигурации базы данных, он, вероятно, происходит от переменной окружения. Убедитесь, что он содержит правильное значение.

+1

Очень полезно. Я мог получить доступ к db и таблицам без проблем, и данные были там. Сервер Rails работал нормально, но я не мог получить доступ к db через Rails Console. Принимая во внимание эту статью (http://stackoverflow.com/questions/33530287/when-i-try-to-do-rake-dbmigrate-i-get-an-error-activerecordnodatabaseerror), я вошел и добавлено 'username' и' password' для моего имени пользователя postgres по умолчанию, и оно работает. Кажется, все исправлено. Должен ли я оставить это на этом, или я должен копать глубже? pgAdmin3 перечисляет моего пользователя по умолчанию как владельца каждого db, который у меня есть, и у меня нет других пользователей ... – Mugshep

+0

В зависимости от ваших требований к конфигурации вы можете оставить его как есть, это действительный подход. Если вы должны использовать своего системного пользователя для доступа к postgres и вам нужны рельсы, чтобы автоматически его подбирать, вам, вероятно, придется немного поработать в пользовательских записях ОС, чтобы понять это. –

45

Это, как представляется, проблема Spring, а не база данных, если вы получаете эту ошибку:

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

в рельсах корневой каталог введите:

spring stop

он должен сказать:

Spring stopped.

, и миграция будет работать после этого!

+0

Аналогичная проблема была закрыта некоторое время назад на rails/spring https://github.com/rails/spring/issues/125 – Dorian

4

Я собираюсь поделиться тем, что сработало для меня, это звучит как шутка, но это не так.

Я включил его снова и снова.

Что я имею в виду, так это то, что я убил экземпляр Redis, который должен запускаться параллельно моей настройке, спрятать локальные изменения в ветке и повторить попытку. И это сработало!

После этого я убил только сервер Unicorn, вытащил трюк, чтобы восстановить локальные изменения и перезапустить. И да, это все еще сработало.

Это не имеет никакого смысла, я знаю, и я приношу свои извинения за отсутствие лучшего объяснения.

Мое единственное догадство заключается в том, что я мог поддерживать серверы единорога и Redis слишком долго (не могу вспомнить, когда я в последний раз закрыл свой Mac), и что-то могло быть испорчено. Если бы это было так, то перезапуск всего стека мог быть решением.

Надеюсь, это даст вам, дорогой читатель, пищу для размышлений об этой загадочной ошибке.

+0

Не могу поверить, что это действительно сработало, спасибо! –

+0

Работал! Я начал получать эту ошибку на своем локальном компьютере после моего компьютера. Я только что перезапустил и позволил грамотно уничтожить процессы, и все началось правильно, когда оно загрузилось. – JLF

Смежные вопросы