Posts Tagged ‘pik’

Managing several Ruby versions and Gem collections on Windows with Pik

Tuesday, April 12th, 2011

If you have several versions and releases of Ruby (e.g. 187-p330, –p334, 1.9.2…) each with their own set of collections of gems for a specific app, then Pik becomes a bit cumbersome to select and manage your Ruby versions – there’s no command to “rename” a Ruby version to a for you memorable name (such as the name for the application linked to the ruby install).

  $ pik list

  186: ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]
  187-ref-r187-p330: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mingw32]
* 187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mingw32]
  187: ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
  192-192-rubies-refinery: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]
  192: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

Now there’s also a way to do that manually: just edit the config.yml file in your C:\Users\Pascal\.pik\ folder:

---
"186: ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]":
  :path: !ruby/object:Pathname
    path: C:/Ruby/bin
"187-ref-r187-p330: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/Users/Pascal/.pik/rubies/Ruby-187-p330/bin
"187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/ruby187/bin
"187: ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/Users/Pascal/.pik/rubies/Ruby-187-p334/bin
"192-192-rubies-refinery: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/Users/Pascal/.pik/rubies/Ruby-192-p180/bin
"192: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/Ruby192/bin
--- {}


Becomes (by changing the “logical names” before the colon to something more meaningful):

---
"Default-186: ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]":
  :path: !ruby/object:Pathname
    path: C:/Ruby/bin
"RefineryGemset-187-p330: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/Users/Pascal/.pik/rubies/Ruby-187-p330/bin
"Default-187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/ruby187/bin
"Clean-187: ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/Users/Pascal/.pik/rubies/Ruby-187-p334/bin
"RefineryGemset-192-p189: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/Users/Pascal/.pik/rubies/Ruby-192-p180/bin
"Default-192: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/Ruby192/bin
--- {}

And now listing and selecting (with Pik use…) the right version is a lot easier:

  $ pik list
  Clean-187: ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
  Default-186: ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]
* Default-187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mingw32]
  Default-192: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]
  RefineryGemset-187-p330: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mingw32]
  RefineryGemset-192-p189: ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

What you can also do now, is manually copying a base Ruby+gems collections when you start a new app, e.g. copy C:\Users\Pascal\.pik\rubies\Ruby-187-p334 to C:\Users\Pascal\.pik\rubies\Ruby-187-p334-Refinery and add in the config.yml:

"Newapp-187: ruby 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]":
  :path: !ruby/object:Pathname
    path: C:/Users/Pascal/.pik/rubies/Ruby-187-p334-Refinery/bin

BTW: don’t forget to also add the path to the new Ruby version to your Devkit/config.yml file and to run ruby dk.rb install if you want to use native extensions.

“Pik install” command downloads and extracts a Ruby version, but: “Couldn’t find a Ruby version at <path>”

Tuesday, April 12th, 2011

I had this issue several times up to the point I was unable to install any Ruby version.  Then I went looking in the

C:\Users\Pascal\.pik\downloads

directory and found several .7x files with file size = 0 from failed previous installs.

Delete those, and you’re able to install the corresponding Ruby versions again…

sh.exe “command not found” for an installed gem (while using pik and msysgit on Windows)

Wednesday, March 16th, 2011

Just for the people googling this problem…  If you have installed a gem and the promised command does not work (in my case: “annotate” after installing the Annotate gem), try:

bundle exec annotate

That way, you force a lookup in the bundled gems rather than the system gems.