(圖說:現代 composer 的創作環境,不只音符繚繞更是線材繚繞而產生相依性。圖片來源。)
最近熔斷機制正夯,手邊的幾個 Laravel 專案,最近也跟上潮流,被熔斷惹。
起因
近期零散收到來自 AWS CodeBuild build fail 的通知,錯誤訊息大致如下:
內容大綱
Installing ocramius/package-versions Failed to download ocramius/package-versions from dist: Could not authenticate against github.com
Now trying to download from source
Installing ocramius/package-versions (1.4.2): Cloning 44af6f3a2e
[RuntimeException]
Failed to clone https://github.com/Ocramius/PackageVersions.git, git was not found, check that it is installed and in your PATH env.
sh: 1: git: not found
都停在 composer install 上頭。
暫時對策
一開始發現這個情況時,請 AWS CodeBuild retry 就過去了,但隨著時間的推移,相同/類似原因的 build failure rate 越來越高,已達到需要面對它的標準。看到 git: not found
也曾想過把 git
裝上去,但這招治標不治本,因為這是個錯誤處理程序裡頭的次要流程,不該解在這個位置。
確認真因
在 composer 文件中有個段落提到「API rate limit and OAuth tokens」,是遇到 GitHub 設下的 API 呼叫次數限制:
- 經過授權者:5,000 requests per hour
- 未經授權者:60 requests per hour (originating IP address base)
解法是:
- 建立 GitHub personal (OAuth) access token。建立時,選擇
read:packages
這個 scope 足以。 - 將產生出來的 token 交給 composer:
composer config -g github-oauth.github.com <oauthtoken>
。 - 接下來再執行 composer install 等相關動作即可。
延伸閱讀
- Composer Troubleshooting: API rate limit and OAuth tokens
- GitHub REST API v3: Rate limiting