If you have a few
hours weeks to kill, go online and search for RVM, rbenv, “bundle exec“, “You have already activated…” and a dozen other common issues. Based on the volume of articles and forum posts on these topics, I’d say that managing Ruby and Ruby Gems versions is perhaps the largest single Time Waster for Ruby developers.
All these solutions, bundler, RVM, rbenv and others, are ugly hacks. I’m not complaining about all brazillion hours of work done by volunteers to create these fixups… I’m complaining about the reason we need all this brou-ha-ha in the first place. As far as I can tell there are no current solutions for having multiple Ruby development environments on the same machine (different Ruby versions, Gems, and Gem versions) without clunking up the experience. Having to type “bundle exec” before every command is an ugly, inconvenient, and error-prone hack. And that’s probably the best one.
I think the problem’s very basic. All the solutions we have are trying too hard to:
- Save disk space (that is, to avoid installing multiple copies of Ruby and Gems to support multiple environments.)
- Hide operational details
- Make new project setup trivially easy
and so on. Wouldn’t it be nice if we had none of this business and could simply set up an environment inside a directory and use the original, basic commands to manage Ruby versions, Gems, and Gem versions? There’d be no more crazy shit like “you have already activated” for Gems you didn’t even know were listed as dependencies. You wouldn’t be running “bundle update” all the time when your project’s screwed up because of something you set up for another project. And then hoping everything works with all the new versions. And you wouldn’t be typing “bundle exec” before all the commands so they will work (or forgetting to do it and wasting time or worse.)