A powershell module for managing your ruby environments on Windows.
I’ve been working with Ruby in a Windows environment for a little over a year now. I’m sad to say that community support for Windows developers is lackluster. We are second-class citizens.
The most frustrating example of this is the lack of decent ruby version switchers. rvm doesn’t install on Windows at all. Ditto for rbenv. uru is a valiant attempt, but it is cumbersome to install and it’s API is less than intuitive.
This wouldn’t much of an issue if ruby installations were backwards compatible, but that is not the case. Even minor version releases of Ruby can incur breaking changes ruining your execution environment.
For development purposes, it’s a good idea to install the new ruby version, switch your ruby environment, then run all your tests on all your projects to verify compatibility. If you need to roll back, just switch your ruby environment and everything is good.
As I started digging into how tools like rvm and rbenv work, I became surprised a the difficuly of reimplementing them on Windows. Aside from the installation features (e.g.
rvm install ruby-version), ruby version management is basically just editing the
PATH variable. In other words, the great barrier, the monumental technical challenge that prevents anyone from developing an easy-to-install , easy-to-use ruby version switcher is: string manipulation.
A ruby version switcher needs to know the location of installed rubies. It needs to be able to alter the
PATH for the current session such that the desired ruby is the one being used.
It is not the norm for Windows developers to think about altering their terminal session. It is the norm that alterations to the PATH are permanent. Reorienting our thinking around editing our Session as against our Environment has many benefits which I won’t go into here–except to say that it makes the issue of version switching much simpler.
I wrote a powershell module called psundle-ruby (compatible with psundle) to discover and manage ruby versions. If you have not looked at
psundle, I encourage you to do so as it makes installation of this module as simple as:
Install-PsundleModule 'crmckenzie' 'psundle-ruby'
If you have already installed rubies in your Windows environment, you can execute
Register-RubiesInPath to make Psundle aware of them. Otherwise you can invoke
Register-Ruby for each ruby location not found in your
Use-Ruby to switch to the desired version. The argument to
Use-Ruby is an expression. The command switches to the first ruby it finds that matches the expression.
For example, if I have the following rubies installed on my machine:
I can invoke
Use-Ruby "1" to switch to ruby-1.9.3. Invoking
Use-Ruby "2" will switch me to ruby-2.
Set-DefaultRuby to permanently alter your
PATH variable to automatically select the chosen ruby.
Committment to Maintain
I commit to maintaining this powershell module through the end of 2016. If you find issues, please report them or (even better) submit a pull-request. I will reevaluate my committment at the end of 2016 based on the level of interest and usage of this module.