--pathつきでbundleしたときのGemfile内でrequireすると指定したpathからロードしようとしてくる
背景
やんごとなき事情によりGemfile内で色々することになり*1そのためのgemを作って使うことになった。 ローカルではうまくいったけどCI環境にいれてみるとどーもうまくいかない。
事象その1
状況
# Gemfile source "https://rubygems.org" require 'awesome_gem'
$ bundle # 詳細わすれたけどそんなgemねえ系のエラー
解決策
先にグローバルにgem installしておけばいいんじゃね?
$ gem install awsome_gem $ bundle # => OK
事象その2
状況
Gemfileは同じ。
$ gem install awsome_gem $ bundle install --path vendor/bundle # 詳細わすれたけどそんなgemねえ系のエラー
--path
を指定するとまたもrequireでコケる
これはなぜかというと、--path
オプションを指定した場合、Gemfileを読み込む時点でrequireでロードするパスがオプションの値になってるっぽい。
だからグローバルにインストールしておいてもそれをrequireしてくることができない
解決策
$ mkdir tmp $ cd tmp $ echo <<EOS > Gemfile source "https://rubygems.org" gem 'awesome_gem' EOS $ bundle install --path ../vendor/bundle $ cd ../ $ rm -rf tmp $ bundle install --path vendor/bundle
要は別Gemfileでvendor/bundleに突っ込んでおけばよい。
こんなことでハマる人、たぶんそうそういないと思うけどメモ。
*1:いいプラクティスではない気がしている