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

提取憑證已過期

您提出提取要求,但收到下列錯誤訊息:

 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 中的存放區名稱。

提取要求錯誤: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