rubygems.org の一部のミラーが応答してくれない問題が起きたんので謎の環境変数を作り出した話

今朝、rubygems.org のミラーの一部が応答してくれず、たくさんの CI ジョブが bundle install できずに何度も死ぬ現象が起きて阿鼻叫喚でした。

問題が起きていないミラーサーバを直接見に行くと bundle install は成功するようでした。

そこで、Gemfile に次のような patch を当て、BUNDLE_SOURCE という謎の環境変数を使って、いざという時は gem source URL を置き換えられるようにしました。

diff --git a/Gemfile b/Gemfile
index df16eb4..22d340d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,4 +1,8 @@
-source 'https://rubygems.org'
+if ENV['BUNDLE_SOURCE'].nil? || ENV['BUNDLE_SOURCE'].empty?
+  source 'https://rubygems.org'
+else
+  source ENV['BUNDLE_SOURCE']
+end

 gem 'rails', '4.0.0'
 gem 'rack', '1.5.2'

これだけでは、すべての CI ジョブのビルドスクリプトをひとつひとつ編集して BUNDLE_SOURCE=https://rubygems.どこそこ.org/ という行を追加して回らなければなりません。それはとても面倒なので、Omukins の global configuration で環境変数を定義しました。