Gemfileの:platformsはRUBY_VERSIONのかっちょいいやつではない

GemfileのplatformsはRUBY_VERSIONのかっちょいいやつと思ってたんだけど、そうではないっぽい。http://gembundler.com/v1.3/man/gemfile.5.html#PLATFORMS-platforms-

bundle –version
1.3.5

if RUBY_VERSION < ‘1.9’
#anything
end

を宣言的に?dslで書くと

platforms :ruby_18 do
#anything
end

これと全く一緒かと思ってたけど違うようだ。

具体的には、gemspecには ‘>= x.y.z’と書いて、個別のGemfileでそれを'< a.b.c’ で上書きするようなケースはよくある。そのとき1.8.7のときだけバージョン縛りかけようとして、platforms ってかくとその宣言したplatform以外ではインストールされなくなってしまう。バグってるんだと思うけど、1.3.5時点ではそう。
https://github.com/Shopify/active_merchant/pull/685
こんなpull requestのときに、Gemfileに

platforms :ruby_18 do
gem ‘mocha’, ‘< 0.13.0’, :require => false
end

と書いてしまうと、1.8環境以外ではgemspecのadd_development_dependency(‘mocha’, ‘>= 0.11.3’) が効くのを期待してた。でも、mochaがbundleされなくなってしまった。

もっとわかりやすく書くと、以下の感じで書くと、2箇所でmochaが定義されてます、とエラーになる。

gem ‘mocha’, ‘< 0.13.0’, :require => false, :platforms => :ruby_18
gem ‘mocha’, :require => false, :platform => [:ruby_19, :ruby_20]

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中