Подтвердить что ты не робот

ActiveRecord:: NoDatabaseError: локального пользователя с идентификатором не существует

Разработка приложения Rails для работы с API-интерфейсом для использования данных из API, фильтрации нескольких полей, а затем трансляции полей, которые мы хотим публиковать.

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

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

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

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

Спасибо заранее.

Консоль 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

Моя база данных .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
4b9b3361

Ответ 1

Кажется, проблема 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)

в корневом каталоге rails введите:

spring stop

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

Spring stopped.

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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

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 не установлен в вашей конфигурации базы данных, он, вероятно, исходит из переменной среды. Убедитесь, что он содержит правильное значение.