web-dev-qa-db-fra.com

ActiveRecord :: NoDatabaseError: l'utilisateur local avec l'ID n'existe pas

Développement d'une application API uniquement Rails pour consommer les données d'une API, filtrer un certain nombre de champs, puis diffuser les champs que nous voulons rendre publics.

Mon application renvoyait des données normalement, mais j'ai réalisé qu'au niveau de l'API source, nous avons changé le type de données pour l'un des champs de données que nous exposons. Pour s'adapter, j'ai validé mon travail, vérifié une nouvelle branche, effectué une migration pour modifier le type de données d'un champ de données, décidé que je n'étais pas satisfait de la façon dont cela fonctionnait, annulé la migration, validé et extrait la branche principale. L'application renvoie des données normalement. Cependant, maintenant, lorsque je teste les enregistrements de mon modèle dans Rails Console en utilisant des méthodes du Finder comme .first, .last, etc., j'obtiens l'erreur ci-dessous. Ils fonctionnaient bien avant.

J'ai regardé autour de moi et je n'ai vu aucun fil sur cette erreur particulière (ils semblent tous traiter de trouver des enregistrements individuels pour la page d'exposition) - bien que this , et this = le fil (par extension) semble le plus proche. Et la vérification des utilisateurs sur la base de données que j'utilise montre que l'ID utilisateur ("501") dans l'erreur n'est pas présent.

Qu'est-ce que j'ai fait et que dois-je faire pour pouvoir à nouveau appeler les méthodes du Finder? Dois-je créer cet utilisateur référencé dans l'erreur dans ma base de données? (et pourquoi n'est-ce pas l'utilisateur par défaut que j'utilise toujours pour me connecter à ma base de données? D'où vient cet ID utilisateur dans l'erreur? Est-ce même important?)

ps - au cas où c'est pertinent, j'ai utilisé rake db:rollback pour annuler ma migration selon this thread.

Merci d'avance.

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

Je reçois définitivement mes enregistrements - ils arrivent dans la base de données:

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

de mon schéma

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

Mon 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
21
Mugshep

Cela semble être le problème de Spring, pas la base de données si vous obtenez cette erreur:

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

dans le répertoire racine Rails, entrez:

spring stop

il faut dire:

Spring stopped.

et la migration fonctionnera après ça!

67
0bserver07

Je vais partager ce qui a fonctionné pour moi, cela ressemble à une blague, mais ce n'est pas le cas.

je l'ai rallumé et éteint.

Ce que je veux dire par là, c'est que j'ai tué l'instance Redis qui doit s'exécuter en parallèle à ma configuration, j'ai caché les modifications locales sur la branche et j'ai réessayé. Et ça a marché!

Après cela, j'ai tué le serveur Unicorn uniquement, j'ai sauté la cachette pour restaurer mes modifications locales et redémarré. Et oui, cela fonctionnait toujours.

Cela n'a aucun sens, je sais et je m'excuse de ne pas avoir de meilleure explication.

Ma seule supposition est que j'ai peut-être laissé les serveurs Unicorn et Redis fonctionner trop longtemps (je ne me souviens pas la dernière fois que j'ai éteint mon Mac) et quelque chose a peut-être été gâché. Si tel était le cas, le redémarrage de la pile entière aurait pu être la solution.

J'espère que cela vous donne, cher lecteur, matière à réflexion sur cette mystérieuse erreur.

7
mokagio

L'erreur n'est pas liée à vos données d'entreprise. En regardant les premières lignes de votre journal ...

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'

... il est clair que Rails ne peut pas se connecter à la base de données.

L'utilisateur local mentionné est probablement un utilisateur du système d'exploitation qui a été configuré pour accéder à la base de données postgres et son enregistrement est soit supprimé, soit corrompu.

Essayez de vous connecter à votre base de données à l'aide de psql à partir de la console et voyez s'il y a des problèmes. La commande devrait ressembler à ceci.

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

Puisque votre username n'est pas défini dans votre configuration de base de données, il provient probablement d'une variable d'environnement. Vérifiez qu'il contient la valeur appropriée.

3
Nic Nilov