web-dev-qa-db-ja.com

ActiveRecord :: NoDatabaseError:IDを持つローカルユーザーが存在しません

API専用のRailsアプリを開発して、APIからのデータを消費し、いくつかのフィールドをフィルターで除外してから、パブリックにするフィールドをブロードキャストします。

私のアプリは正常にデータを返していましたが、ソースAPIレベルで、公開するデータのフィールドの1つのデータ型を変更したことに気付きました。対応するために、作業をコミットし、新しいブランチをチェックアウトし、データフィールドのデータ型を変更するために移行を実行し、その動作に満足できないと判断し、移行をロールバックし、コミットして、マスターブランチをチェックアウトしました。アプリは通常どおりデータを返します。ただし、今では、モデルのレコードをRails .first.lastなど、以下のエラーが表示されます。以前はうまく機能していました。

私は周りを見回して、この特定のエラーに関するスレッドを見ていません(これらはすべて、ショーページの個々のレコードの検索に対処しているようです)- this 、および this =スレッド(拡張子による)が最も近いようです。そして、使用しているデータベースのユーザーを確認すると、エラーのユーザーID( "501")が存在しないことがわかります。

Finderメソッドを再度呼び出すことができるように、私は何をし、何をする必要がありますか?データベース内のエラーで参照されるユーザーを作成する必要がありますか? (そして、なぜデータベースに接続するために常に使用するデフォルトのユーザーではないのですか?エラー内のそのユーザーIDはどこから来たのでしょうか?それも重要ですか?)

ps-関連がある場合は、rake db:rollbackthis threadに従って移行をロールバックします。

前もって感謝します。

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

このエラーが発生している場合、データベースではなく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.

その後、移行が機能します!

67
0bserver07

私は自分のために働いたものを共有するつもりです、それは冗談のように聞こえますが、そうではありません。

再度オンとオフを切り替えました

つまり、セットアップと並行して実行する必要があるRedisインスタンスを強制終了し、ブランチ上のローカルの変更を隠してから、再試行しました。そしてそれはうまくいきました!

その後、Unicornサーバーのみを強制終了し、スタッシュをポップしてローカルの変更を復元し、再起動しました。そして、はい、それはまだ働いた。

これは意味をなさない、私は知っているし、私はより良い説明を持っていないことをおizeびします。

私の唯一の推測は、UnicornサーバーとRedisサーバーの実行時間が長すぎた可能性があり(前回Macをシャットダウンしたときのことを思い出せない)、何かがめちゃくちゃになった可能性があることです。その場合は、スタック全体を再起動することが解決策でした。

親愛なる読者の皆さんに、この神秘的な誤りについての考えの糧が与えられることを願っています。

7
mokagio

エラーはビジネスデータとは関係ありません。ログの一番上の行を見て...

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データベースにアクセスするように構成されたOSユーザーである可能性が高く、そのレコードは削除または破損されています。

コンソールからpsqlを使用してデータベースに接続し、問題があるかどうかを確認してください。コマンドは次のようになります。

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

usernameはデータベース設定で設定されていないため、おそらく環境変数から取得されます。適切な値が含まれていることを確認してください。

3
Nic Nilov