Which ruby is running me?


#1

So I have despaired of getting mutexes, threads and forks to coexist
peacably in Ruby. (As soon as the child process touches a mutex that
existed in the parent… Bad Things can happen.)

So Plan B is to

  • spin a thread
  • to mind a fork
  • that just execs
    a new instance of Ruby.

Now I tend to have several versions of Ruby lying around on my Box.

What is the One True Way of finding the path to the instance of ruby
that is currently executing this script?

GNU “Make” is pretty good about this, it has a $(MAKE) variable that
gives the exact path of make that is running.

John C. Phone : (64)(3) 358 6639
Tait Electronics Fax : (64)(3) 359 4632
PO Box 1645 Christchurch Email : removed_email_address@domain.invalid
New Zealand


#2

On Apr 19, 2009, at 6:45 PM, John C. wrote:

What is the One True Way of finding the path to the instance of ruby
that is currently executing this script?

I’m pretty sure this always works:

$ ruby -r rbconfig -e ‘p File.join(Config::CONFIG.values_at(*%w[bindir
ruby_install_name])) + Config::CONFIG[“EXEEXT”]’
“/usr/local/bin/ruby”

James Edward G. II


#3

On Mon, 20 Apr 2009, James G. wrote:

On Apr 19, 2009, at 6:45 PM, John C. wrote:

What is the One True Way of finding the path to the instance of ruby
that is currently executing this script?

I’m pretty sure this always works:

$ ruby -r rbconfig -e ‘p File.join(Config::CONFIG.values_at(*%w[bindir
ruby_install_name])) + Config::CONFIG[“EXEEXT”]’
“/usr/local/bin/ruby”

Thanks! Ooo… a tad ugly though… Ah, well, at least I wasn’t missing
the obvious for a change. :slight_smile:

John C. Phone : (64)(3) 358 6639
Tait Electronics Fax : (64)(3) 359 4632
PO Box 1645 Christchurch Email : removed_email_address@domain.invalid
New Zealand


#4

On Apr 19, 2009, at 6:44 PM, John C. removed_email_address@domain.invalid wrote:

$ ruby -r rbconfig -e ‘p File.join(Config::CONFIG.values_at(*
%w[bindir ruby_install_name])) + Config::CONFIG[“EXEEXT”]’
“/usr/local/bin/ruby”

Thanks! Ooo… a tad ugly though… Ah, well, at least I wasn’t missing
the obvious for a change. :slight_smile:

require ‘rubygems’
Gem.ruby

$ ruby -rubygems -e ‘p Gem.ruby’
“/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby”
$ ruby18 -rubygems -e ‘p Gem.ruby’
“/usr/local/bin/ruby18”
$ ruby19 -e ‘p Gem.ruby’ # require ‘rubygems’ is automatic on 1.9
“/usr/local/bin/ruby19”