Local Gemfile
22 Apr 2021Sometimes I like to use some gems that may not be present in the project Gemfile
. If I have no
power to add to it, or that gem only make sense to me, I use a strategy to create a local Gemfile
Let’s suppose the project uses pry
but I’m a byebug
fan. I will create a new Gemfile
in the project root called Gemfile.local
:
# Reads and evaluates the original Gemfile
eval File.read('Gemfile')
group :development do
gem 'byebug'
end
This file will evaluate all contents of Gemfile
and add the gems we describe below that line.
In this case, we will use all gems plus the byebug
gem in the developement
group.
Now let’s copy the original Gemfile.lock
to a Gemfile.local.lock
to make sure we don’t
change any gem version:
cp Gemfile.lock Gemfile.local.lock
And then we use the --gemfile
bundle option to install the gems:
bundle install --gemfile Gemfile.local
And now we can use it:
# my_code.rb
require 'byebug'
class SomeClass
def some_method
byebug
p 'Hello'
end
end
SomeClass.new.some_method
bundle exec --gemfile Gemfile.local ruby my_code.rb
[1, 10] in my_code.rb
1: require 'byebug'
2:
3: class SomeClass
4: def some_method
5: byebug
=> 6: p 'Hello'
7: end
8: end
9:
10: SomeClass.new.some_method
(byebug)
Nice it works. But do I need to set the --gemfile
in all my commands?
Not really. We can set a environment variable for that:
export BUNDLE_GEMFILE='Gemfile.local'