Kimmo Hintikka
Kimmo Hintikka

Reputation: 15410

Is there a difference between using RVM local gemset and using Bundle exec?

There is fundamental problem with ruby gem sets where commands like rake xxxx might create error because command might use global version of rake while your gemfile requires very specific version.

I know 2 ways to mitigate this.

  1. Use bundle exec in front of rake and rails commands. For example bundle exec rake db:migrate Adding this in front makes sure command is executed in relation of the current bundle meaning the bundle that got created when you run bundle install.

  2. Using RVM. There is less known way of creating local gemset with RVM. First you create directory for your new app in this case mkdir myapp, cd myapp and then run rvm use ruby-2.3.0@myapp --ruby-version --create for creating local gem set with nothing in it. Now you can run gem install rails and rails new . to create rails myapp with it's dedicated gem environment in the folder you are in.

As nice extra RVM will swap to right gemset every time you cd to myapp directory automatically.

As for as I understand both approaches work, but are there any known issues why you would not use one of approaches above?

Upvotes: 3

Views: 694

Answers (2)

moeabdol
moeabdol

Reputation: 5049

If you're an RVM fan like myself, I would go with creating my own gemset for every rails project I start. This will make it easier for me to just use rake and rails commands without specifying bundle exec every time.

Put in mind when sharing your code that some developers might be using rbenv or maybe not using a ruby version manager at all. One way you can make sure that everyone is happy and working with the same version of ruby, is to provide two additional files in your project directory (.ruby-version and .ruby-gemset) and track them in your project.

The .ruby-version file would contain the version of ruby you're using for example 2.4.1. Note that this is compatible with both RVM and rbenv and will switch to the correct ruby version.

The .ruby-gemset file is identified only by RVM; thus, switching to the correct gemset you have setup for the project.

This will make your project compatible with developers using rbenv while still making those of us using RVM happy :)

Putting all these considerations in mind, now you should care less wither people use bundle exec or not!

Upvotes: 1

Andy Jones
Andy Jones

Reputation: 1104

One reason not to use (2): if anyone else wants to work with your code, they will have to duplicate all that for themselves, rather than just remembering to type bundle exec. They have likely never seen (2) before, so this is perhaps non-trivial.

Upvotes: 1

Related Questions