アップデート後、Get /users/by-external/ でURLが見つからないエラーが発生しています

フォーラムを1.6から3.1に更新しており、新しいサーバーへの移行、バックアップの復元、そしてすべてを再接続する必要がありました。

どちらにもサインインするためにSSOを使用しており、これはまだ機能しています。

しかし、Discourseは現在、APIを使用してウェブサイトからアカウント作成を行う際に問題を引き起こす、いくつかのランダムな領域でエラーを発生させているようです。
以前はバージョン0.10.1のRuby gem discourse_api を使用していましたが、これを0.48.1に更新しました。

エラーは DiscourseApiService.new.user(self) で発生します。

これは resp = client.get("/users/by-external/#{user.id}") を呼び出します。

これにより {"errors"=>["The requested URL or resource could not be found."], "error_type"=>"not_found"} というエラーがスローされます。

これは以前は正常に機能していましたが、なぜかURLが見つかりません。

discourse_api gemを以前実行していたバージョン0.10.1にダウングレードしてみましたが、client.get の段階は正常に通過しますが、次の呼び出しで同じエラーで失敗します。

client.sync_sso(

{"errors"=>["The requested URL or resource could not be found."], "error_type"=>"not_found"}

エンドポイントが /u/by-external/{external_id}.json に変更されました。また、そのエンドポイントにはAPIキーとユーザー名が必要です。

「いいね!」 1

解決できました。

ユーザーが見つからない場合にエラーを発生させるようにコードが更新されたようで、nilかどうかを比較する代わりにrescueする必要がありました。

begin
    resp = client.get("/users/by-external/#{user.id}")
rescue DiscourseApi::NotFoundError => error
    puts error.response.body['errors'].first
    sync_user(user)
else
    resp.response.env.body['user']
end

また、レスポンスが次のように変更されました。
resp['body']['user']
から
resp.response.env.body['user']

最後に残った問題は、client.sync_sso を呼び出すと、内部サーバーエラー500が発生することです。

ログには次のように表示されています。
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_emails_pkey"

しかし、Railsコンソールでまったく同じ詳細を使用してclient.sync_ssoを実行すると、問題なく動作します。

参考までに、上記のコードが再び機能するようにエンドポイントは変更していません。そのため、/users/by-external/ は依然として有効なようです。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.