この日は Matz や笹田さんが Euruko に参加するために不在だったので、福岡どうでした?とか最近のイベントの話をしたり、nobu にあの件だけどさあみたいに最近の Ruby の開発の話をしていた。こういう日もある。
yhonda さんから、stringio が 3.1.2.dev になってから rails の CI が落ちるようになったという話をきいて、3.1.2 から 3.1.2.dev になったことで落ちるわけがなかろうと腰を据えて調べていた。
https://github.com/rubygems/rubygems/pull/8016
最初に出した修正は上のような内容。説明をすると bundler/inline を使った gemfile ブロック中に psych や stringio が含まれていると、それらをインストールしたあとに yaml として提供される gemspec 等のデータを読み込むために rubygems で require される default gems としての psych や strignio との間で、Bundler がライブラリとバージョンをロックするときに activate confilct が起きて落ちる、というものだった。ぐぬぬ。
これは Gemfile を使って bundle install と bundle exec をしているときには、 install は default gems の psych を使ってインストールされた gem を解釈して、その後にインストールされた指定バージョンの psych を使うという挙動のため問題は発生しない。
8016 では、psych や stringio が gemfile ブロックに含まれていたら強制的に除外するようにしたんだけど、deivid から default gems としての psych や stringio を gemfile の中に入れて resolution したほうが良くない?とフィードバックがあったので、それはそう、と昔にやりかけになっていた pull-req を掘り起こして動くようにしてマージした。
https://github.com/rubygems/rubygems/pull/5535
こっちの pull-req では、psych などを決め打ちで除外せずに、activation conflict が起きたらその都度、gemfile の中から除外、conflict としてすでに activate されている default gems とそのバージョンを gemfile の中に入れ直して resolve という処理にすることで、指定したバージョンそのものではないが、大体において適当に bundler が動くようにしてある。
この問題を根本的に解決するためにはモリスさんがやっている namespace を使って、インストールフェーズと実行フェーズとで namespace を分ける、などするしかないのだよなあ。モリスさんがんばってくれ!
今週も Discord に集まってアレコレしていた。
https://asakusarb.esa.io/posts/1217
自分は、というと yhonda さんから Ruby の開発状況と今後の Rails のリリースに合わせて、ライブラリの依存関係であるとか、どうするとよいか、みたいな雑談をしていた。ありがたい。
あとは 10 月にドリンクアップするかねえ、と適当な店探し。