Ruby gem のトラブルシューティング

このドキュメントでは、Artifact Registry リポジトリで Ruby gem を使用する際に特定のエラーが発生する理由と、そのような状況に対する可能な解決策について説明します。

プッシュ認証情報の有効期限切れ

プッシュ リクエストを行ったが、次のエラー メッセージが表示された。

Pushing gem to https://LOCATION-ruby.pkg.devPROJECT/REPOSITORY..
The request does not have valid authentication credentials.

認証情報を更新するには、次のコマンドを実行して新しいトークンを生成します。

export GEM_HOST_API_KEY="Bearer $(gcloud auth print-access-token)"
export HOST="https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
bundle config $HOST $GEM_HOST_API_KEY

ここで

  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
  • PROJECT は、プロジェクト ID です。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • REPOSITORY はリポジトリの ID です。デフォルトの Artifact Registry リポジトリを構成した場合、このフラグがコマンドから省略されると、そのデフォルト リポジトリが使用されます。

プッシュ時のログイン プロンプト

プッシュ リクエストを行ったが、ruby.pkg.dev 認証情報の入力を求めるメッセージが表示された場合:

Enter your https://us-ruby.pkg.dev/REPOSITORY/GEM_NAME credentials.
Don't have an account yet? Create one at https://us-ruby.pkg.dev/REPOSITORY/GEM_NAME/sign_up
   Email:

次のコマンドを実行してみてください。

GEM_HOST_API_KEY="Bearer $(gcloud auth print-access-token)"

期限切れの pull 認証情報

プルリクエストを作成しましたが、次のエラー メッセージが表示されました。

 Unable to download data from https://oauth2accesstoken:REDACTED@LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY/ - bad response Unauthorized 401 (https://oauth2accesstoken:REDACTED@LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY/latest_specs.4.8.gz)

認証情報を更新するには、gem sources から期限切れの認証情報ソースを削除します。次に、次のコマンドを実行して新しいトークンを生成します。

export GEM_HOST_API_KEY="Bearer $(gcloud auth print-access-token)"
export HOST="https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
bundle config $HOST $GEM_HOST_API_KEY

ここで

  • LOCATION は、リポジトリの場所です。
  • PROJECT は、プロジェクト ID です。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • REPOSITORY は、Artifact Registry のリポジトリの名前です。

pull リクエスト エラー: Could not fetch specs

プルリクエストを作成しましたが、次のエラー メッセージが表示されました。

Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY/ due to underlying error <bad response Not Found 404 (https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY/specs.4.8.gz)>

このエラーは、プルリクエストが成功した場合でも誤って表示されることがあります。verbose コマンドを使用して、プルリクエストが成功したことを確認します(bundle install --verbose など)。