Run bundle install with the –binstubs option
by Frank
It’s been a little while that I have decided to always extract my gem binaries into my rails application “bin” path. That way, I always execute binaries by specifying the relative path. For example “./bin/rails g model User”. At first I wasn’t sure about the idea. I was like: “Wait a minute! I will have to type “./bin/” all the time?! It will get annoying really fast!”. This turned to be an unfounded fear. Having to type “./bin/rails” or “./bin/rake” is a good thing and it feels really natural. When you do this, there is no magic involved: you know exactly WHICH binary is going to be executed.
Isn’t it exactly like typing “bundle exec” ?
Yes, you’re right… it’s more or less the same thing. But I find that having to type “./bin/” is even more obvious. Believe me, you will get the hang of it quickly. Anyway, with TAB completion, it’s not like you have to type “./bin” really. It will look more like “./b” then TAB. It becomes second nature really fast.
Wow! This is the discovery of the century! I’m sold, how can I do this ? (end sarcasm)
Whenever you update your Gemfile, you do
bundle –binstubs








hey!
if you use rvm, you can use rubygems-bundler (https://github.com/mpapis/rubygems-bundler) and you do not event need ./bin you can use your commands like always and rvm will prepend your bitstups to $PATH :)
cheers
Thanks for the comment Jumski! Yes I know about rubygems-bundler. It is an interesting solution but a bit too “magical” for me. My point is that I like having to explicitly type “./bin/” to run the binaries because it makes it crystal clear as to where these binaries are located.
You can make it crystal clear where the binaries are located by doing “which binary”
One could add ./bin to $PATH too, for a bit more ease of use.
For a regular gem this could be a bit annoying if one’s project had it’s own bin files. For instance one would have to be careful they don’t all get included in the project’s gemspec.
Could they be stubbed to script/ directory instead?