LoginSignup
2
0

More than 3 years have passed since last update.

repository指定したgemをbundle install しても最新に更新されない

Posted at

TL;DR

gemfileが更新されていない場合gemfile.lockにあるrevisionのcommit hashを見に行ってしまうので

console
bundle update gem-name

しましょう

問題

社内で使っているライブラリにfork -> PR -> mergeまで行っていざ確認してみようとすると追加したはずのmethodが未定義と言われてしまっていた。

解決までしたこと

まず何なら使えるのかを確認

rails_console
# respond_to?はメソッドが存在するかどうかを確認するやつです
GemName respond_to? :configure #-> true
GemName respond_to? :new_added_method #-> false

# PRで入れたはずのメソッドがないことに気づいてgem自体は問題なく入っているかどうかを確認
GemName.added_a_lomng_time_ago_method #-> 通った

ここでPRの内容がまるっと入っていないことに気づいてHEADがずれてるんじゃないかみたいなことを検討した

console
git clone git@github.com:my-org/gem-name # forkではなく大元のリポジトリをclone
git rev-parse HEAD #-> 00ff0012345
git rev-parse master #-> 00ff0012345(HEADと同じなのを確認)

ずれてないねってことで試しにcommit hashでgemを指定

gemfile
gem 'gem-name', git: 'git@github.com:my-org/gem-name', ref: '00ff0012345'

# bundle install する
rails_console
GemName.new_added_method #-> 通った!

ので、gemfile.lockを確認した所、revisionが変わってた。ここが原因やったんやな…………

この後

gemfile
gem 'gem-name', git: 'git@github.com:my-org/gem-name', branch: 'master'

にしても問題なかったです。まあcommit hash指定時にrevisionがHEADになったから想定内。

本来すべきこと

まあそもそもinstallはgemfile.lockを元に行われることなので当たり前といえば当たり前なのですが、bundle updateを使う必要がありました。リポジトリを直接指定していることにばかり気を取られて完全に忘れてました。
もしbundle installと同時にupdateを行いたい場合はまとめて行う実行ファイルを作成する必要があります。

参考:https://stackoverflow.com/questions/8324334/bundler-always-use-latest-revision-of-git-branch-in-gemfile

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0