Skip to content

Instantly share code, notes, and snippets.

@luislavena
Last active December 14, 2021 06:39
Show Gist options
  • Save luislavena/d02bb70aaef34458ddadbdb43f4ea619 to your computer and use it in GitHub Desktop.
Save luislavena/d02bb70aaef34458ddadbdb43f4ea619 to your computer and use it in GitHub Desktop.
Collecting information about Ruby gems installed

Introduction

Hello! I'm doing some analysis of installed Ruby gems, specially those that require a compiler toolchain to be installed.

This analysis will help me determine an usage pattern and potentially work with gem authors to improve platform support for those gems.

Will be great if you can help me collect this information.

You can run the script below in your machine and copy over the output as comment to this Gist. Even better, if you can run this within your application directory, to ensure it collects all possible binary gems your application uses.

In case of doubt, you can inspect the annotated code of the script below. No sudo or other weird things are required except for curl utility be installed.

Thank you in advance for your help!

rvm, gemsets or vendor/bundle paths

If you install gems using rvm's gemsets or install gems with a specific path (ie. bundle install --path or bundle install --deployment), your application gems will not be visible.

Please prepend bundle exec to the ruby command shown below.

Run in one-line

The following are simple one-liner commands to invoke the script and copy the results directly to the clipboard.

Linux

$ curl -L https://bit.ly/list-binary-gems | ruby | xclip -sel c

Note: Please change ruby to bundle exec ruby if using bundler or gemsets in your application.

OSX

$ curl -L https://bit.ly/list-binary-gems | ruby | pbcopy

Note: Please change ruby to bundle exec ruby if using bundler or gemsets in your application.

require "yaml"
# Collect a list installed gems with extensions
specs = Gem::Specification.find_all do |spec|
spec.platform == Gem::Platform::RUBY && spec.extensions.any?
end
# map only name and version
list = specs.map do |spec|
{ name: spec.name, version: spec.version.to_s }
end
puts "```yaml"
puts YAML.dump(list)
puts "```"
@PhilipCastiglione
Copy link

---
- :name: nokogiri
  :version: 1.8.0
- :name: bcrypt
  :version: 3.1.11
- :name: byebug
  :version: 9.0.6
- :name: ffi
  :version: 1.9.18
- :name: json
  :version: 2.1.0
- :name: passenger
  :version: 5.1.6
- :name: pg
  :version: 0.21.0
- :name: pg_array_parser
  :version: 0.0.9
- :name: rainbow
  :version: 2.2.2
- :name: ruby-prof
  :version: 0.16.2

@anicholson
Copy link

---
- :name: nokogiri
  :version: 1.6.8
- :name: rgeo
  :version: 0.3.20
- :name: unf_ext
  :version: 0.0.7.4
- :name: json
  :version: 1.8.6
- :name: bcrypt
  :version: 3.1.11
- :name: debug_inspector
  :version: 0.0.2
- :name: binding_of_caller
  :version: 0.7.2
- :name: byebug
  :version: 9.1.0
- :name: hitimes
  :version: 1.2.4
- :name: ffi
  :version: 1.9.3
- :name: eventmachine
  :version: 1.2.0.1
- :name: yajl-ruby
  :version: 1.2.1
- :name: oj
  :version: 2.7.3
- :name: kgio
  :version: 2.11.0
- :name: libv8
  :version: 3.16.14.15
- :name: msgpack
  :version: 0.5.8
- :name: pg
  :version: 0.18.4
- :name: puma
  :version: 3.9.1
- :name: rainbow
  :version: 2.2.2
- :name: raindrops
  :version: 0.13.0
- :name: redcarpet
  :version: 3.3.3
- :name: therubyracer
  :version: 0.12.2
- :name: thin
  :version: 1.7.0
- :name: unicorn
  :version: 4.9.0
- :name: yaji
  :version: 0.3.3

@veelenga
Copy link

---
- :name: bigdecimal
  :version: 1.3.4
- :name: binding_of_caller
  :version: 0.7.2
- :name: bson
  :version: 4.2.2
- :name: bson_ext
  :version: 1.5.1
- :name: byebug
  :version: 9.1.0
- :name: date
  :version: 1.0.0
- :name: dbm
  :version: 1.0.0
- :name: debug_inspector
  :version: 0.0.2
- :name: etc
  :version: 1.0.0
- :name: eventmachine
  :version: 1.2.5
- :name: executable-hooks
  :version: 1.3.2
- :name: fcntl
  :version: 1.0.0
- :name: ffi
  :version: 1.9.18
- :name: gdbm
  :version: 2.0.0
- :name: gem-wrappers
  :version: 1.2.7
- :name: io-console
  :version: 0.4.6
- :name: json
  :version: 2.1.0
- :name: json
  :version: 1.8.6
- :name: kgio
  :version: 2.11.0
- :name: kgio
  :version: 2.9.2
- :name: mysql2
  :version: 0.4.9
- :name: nio4r
  :version: 2.1.0
- :name: nokogiri
  :version: 1.8.1
- :name: nokogumbo
  :version: 1.4.1
- :name: oj
  :version: 3.3.8
- :name: oj
  :version: 3.0.5
- :name: openssl
  :version: 2.1.0
- :name: psych
  :version: 3.0.2
- :name: rainbow
  :version: 2.2.2
- :name: raindrops
  :version: 0.19.0
- :name: raindrops
  :version: 0.13.0
- :name: sdbm
  :version: 1.0.0
- :name: stringio
  :version: 0.0.1
- :name: strscan
  :version: 1.0.0
- :name: syck
  :version: 1.3.0
- :name: therubyracer
  :version: 0.12.3
- :name: thin
  :version: 1.7.2
- :name: unf_ext
  :version: 0.0.7.4
- :name: unicorn
  :version: 5.3.1
- :name: unicorn
  :version: 4.8.2
- :name: websocket-driver
  :version: 0.6.5
- :name: zlib
  :version: 1.0.0

@megatux
Copy link

megatux commented Aug 31, 2018

---
- :name: bcrypt
  :version: 3.1.10
- :name: bigdecimal
  :version: 1.2.6
- :name: binding_of_caller
  :version: 0.7.2
- :name: byebug
  :version: 3.5.1
- :name: concurrent-ruby-ext
  :version: 1.0.1
- :name: debug_inspector
  :version: 0.0.2
- :name: eventmachine
  :version: 1.2.5
- :name: ffi
  :version: 1.9.8
- :name: hitimes
  :version: 1.2.2
- :name: io-console
  :version: 0.4.3
- :name: json
  :version: 1.8.6
- :name: json
  :version: 1.8.3
- :name: kgio
  :version: 2.9.3
- :name: nokogiri
  :version: 1.8.4
- :name: nokogiri
  :version: 1.6.8
- :name: oj
  :version: 2.16.1
- :name: oj
  :version: 2.12.14
- :name: pg
  :version: 0.18.2
- :name: psych
  :version: 2.0.8
- :name: raindrops
  :version: 0.13.0
- :name: scrypt
  :version: 1.2.1
- :name: thin
  :version: 1.7.2
- :name: unf_ext
  :version: 0.0.7.1
- :name: unicorn
  :version: 4.9.0

@Nakilon
Copy link

Nakilon commented Oct 5, 2020

---
- :name: bigdecimal
  :version: 2.0.0
- :name: byebug
  :version: 11.0.1
- :name: date
  :version: 3.0.0
- :name: dbm
  :version: 1.1.0
- :name: etc
  :version: 1.1.0
- :name: fcntl
  :version: 1.0.0
- :name: ffi
  :version: 1.11.3
- :name: gdbm
  :version: 2.1.0
- :name: io-console
  :version: 0.5.6
- :name: json
  :version: 2.3.0
- :name: openssl
  :version: 2.1.2
- :name: phamilie
  :version: 0.1.0
- :name: psych
  :version: 3.1.0
- :name: racc
  :version: 1.4.16
- :name: readline-ext
  :version: 0.1.0
- :name: rmagick
  :version: 2.16.0
- :name: sdbm
  :version: 1.0.0
- :name: stringio
  :version: 0.1.0
- :name: strscan
  :version: 1.0.3
- :name: zlib
  :version: 1.1.0

@Nakilon
Copy link

Nakilon commented Dec 14, 2021

---
- :name: bigdecimal
  :version: 1.2.8
- :name: bit_utils
  :version: 0.1.2
- :name: byebug
  :version: 11.0.1
- :name: byebug
  :version: 11.0.0
- :name: byebug
  :version: 10.0.2
- :name: charlock_holmes
  :version: 0.7.7
- :name: dhash-vips
  :version: 0.1.1.3
- :name: dhash-vips
  :version: 0.1.0.1
- :name: dhash-vips
  :version: 0.1.0.0
- :name: digest-crc
  :version: 0.6.3
- :name: escape_utils
  :version: 1.2.1
- :name: ffi
  :version: 1.15.4
- :name: ffi
  :version: 1.15.3
- :name: ffi
  :version: 1.15.0
- :name: ffi
  :version: 1.14.2
- :name: ffi
  :version: 1.13.1
- :name: ffi
  :version: 1.12.2
- :name: github-linguist
  :version: 7.15.0
- :name: github-linguist
  :version: 7.11.0
- :name: hpricot
  :version: 0.8.6
- :name: iStats
  :version: 1.6.1
- :name: io-console
  :version: 0.4.5
- :name: jaro_winkler
  :version: 1.5.4
- :name: json
  :version: 2.5.1
- :name: librrd
  :version: 1.0.4
- :name: nio4r
  :version: 2.5.2
- :name: nokogiri
  :version: 1.10.10
- :name: nokogiri
  :version: 1.10.9
- :name: nokogiri
  :version: 1.10.8
- :name: nokogiri
  :version: 1.10.7
- :name: nokogiri
  :version: 1.10.5
- :name: nokogiri
  :version: 1.10.4
- :name: nokogiri
  :version: 1.10.3
- :name: nokogiri
  :version: 1.6.8.1
- :name: oga
  :version: '3.3'
- :name: oj
  :version: 3.10.8
- :name: patron
  :version: 0.13.3
- :name: phamilie
  :version: 0.1.0
- :name: psych
  :version: 2.1.0.1
- :name: puma
  :version: 4.3.6
- :name: rdiscount
  :version: 2.2.0.2
- :name: rmagick
  :version: 4.1.2
- :name: rmagick
  :version: 3.2.0
- :name: rmagick
  :version: 2.16.0
- :name: ruby-ll
  :version: 2.1.2
- :name: ruby-prof
  :version: 0.18.0
- :name: ruby-prof
  :version: 0.17.0
- :name: ruby-prof
  :version: 0.16.2
- :name: ruby2d
  :version: 0.9.4
- :name: ruby2d
  :version: 0.9.2
- :name: rugged
  :version: 1.0.1
- :name: stackprof
  :version: 0.2.15
- :name: tk
  :version: 0.4.0
- :name: tk
  :version: 0.3.0
- :name: vmstat
  :version: 2.3.1
- :name: vmstat
  :version: 2.3.0
- :name: websocket-driver
  :version: 0.7.5
- :name: websocket-driver
  :version: 0.7.3
- :name: yajl-ruby
  :version: 1.4.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment