0

今日、Ruby-on-Rails アプリケーションでバグが発生しました。どういうわけか、Device モデルを介して awsvpc 関連付けにアクセスするたびに、Device モデルの awsaccount_id フィールドが「変更対象としてマーク」されます。

この問題をデバッグするために、いくつかのログ エントリといくつかの余分なコード行 (以下を参照) を追加して、デバイス モデル インスタンスがどのように変更対象としてマークされているかを診断しました。

「dev.changes」メソッドが、ロギング「changes12」と「changes2」の間の保留中の変更を返すことに気付くかもしれません。これらのログ エントリ間で発生する唯一のコードは、dev.awsvpc.id との関連付けにアクセスすることです。

この ruby​​ のコードは、どのような状況で次のようになります。

  Rails.logger.info "Update_Device changes0: #{dev.changes}"
  sample_vpc = dev.awsvpc_id
  Rails.logger.info "Update_Device changes1: #{dev.changes}"
  sample_vpc = Awsvpc.find(dev.awsvpc_id)
  Rails.logger.info "Update_Device changes12: #{dev.changes}"
  sample_vpc = dev.awsvpc.id
  Rails.logger.info "Update_Device changes2: #{dev.changes}"

次のようなログ エントリが発生します。

Update_Device changes0: {}
Update_Device changes1: {}
  [1m[36mAwsvpc Load (0.2ms)[0m  [1m[34mSELECT "awsvpcs".* FROM "awsvpcs" WHERE "awsvpcs"."id" = $1 LIMIT $2[0m  [["id", 644], ["LIMIT", 1]]
  ↳ app/lib/api/api_get_asset_result_builder.rb:53:in `populate_awssubnet'
Update_Device changes12: {}
  [1m[36mCACHE Awsvpc Load (0.0ms)[0m  [1m[34mSELECT "awsvpcs".* FROM "awsvpcs" WHERE "awsvpcs"."id" = $1 LIMIT $2[0m  [["id", 644], ["LIMIT", 1]]
  ↳ app/lib/api/api_get_asset_result_builder.rb:55:in `populate_awssubnet'
Update_Device changes2: {"awsaccount_id"=>[66, 644]}
4

1 に答える 1