Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Installed gem much slower than source

Tags:

ruby

rubygems

rvm

Running an installed gem is much slower than running its local source counterpart.

Installed gem:

$ time wmctile switch_to Thunderbird

real  0m0.682s
user  0m0.491s
sys 0m0.091s

Local source:

$ time ./work/wmctile/bin/wmctile switch_to Thunderbird

real  0m0.197s
user  0m0.118s
sys 0m0.064s

Why? Could it be because of RVM, or is this a "feature" of Ruby gems in general? Is there a way to speed it up?

This is the generated bin file:

$ which wmctile
/home/some_user_name/.rvm/gems/ruby-2.1.2/bin/wmctile

$ cat $( which wmctile )
#!/usr/bin/env ruby_executable_hooks
#
# This file was generated by RubyGems.
#
# The application 'wmctile' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
    version = $1
    ARGV.shift
  end
end

gem 'wmctile', version
load Gem.bin_path('wmctile', 'wmctile', version)
like image 606
mreq Avatar asked Jan 12 '16 21:01

mreq


1 Answers

RVM puts the proper directories for your Ruby version and gemset in the path whenever the RVM Ruby is set. My PATH begins with this:

/Users/kbennett/.rvm/gems/ruby-2.3.0/bin
/Users/kbennett/.rvm/gems/ruby-2.3.0@global/bin
/Users/kbennett/.rvm/rubies/ruby-2.3.0/bin
/Users/kbennett/.rvm/bin

So, I think it's the OS and not Ruby itself that is responsible for the delay. You could test this by putting a simple shell script file in that gem bin directory, and calling it with and without its absolute location to see if you get the same difference.

like image 118
Keith Bennett Avatar answered Sep 24 '22 07:09

Keith Bennett