RVM and Ruby Interpreters @ RSC Roma 03/2011

5,085 views

Published on

Basic introduction to RVM, the Ruby Version Manager, and a showcase of the currently (March 2011) available ruby interpreters.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
5,085
On SlideShare
0
From Embeds
0
Number of Embeds
2,966
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

RVM and Ruby Interpreters @ RSC Roma 03/2011

  1. 1. RVM Cut Rubies With EaseSunday, March 6, 2011
  2. 2. Ruby Version Manager • Multiple Ruby versions (compiled) and installed in parallel • Each Ruby version has its own environment, lives in different directories • Shell scripts to manage PATH, GEM_PATH, GEM_HOME and much moreSunday, March 6, 2011
  3. 3. Why?Sunday, March 6, 2011
  4. 4. Ecosystem • MRI (1.8) • YARV (1.9) • REE • Rubinius • JRuby • MacRuby • IronRuby, MagLev, HotRuby (!)Sunday, March 6, 2011
  5. 5. MRI (1.8) • Gold Ruby Standard • Reference implementation (written in C) • Good enough for most applications • Slow: no bytecode, no JIT • No built-in encoding support - only Iconv • GC sucksSunday, March 6, 2011
  6. 6. REE (1.8) • From Passenger (Apache/Nginx module for Rails apps) devs - phusion.nl • COW friendly • Google’s tcmalloc • Union Station - released yesterdaySunday, March 6, 2011
  7. 7. YARV (1.9) • Current stable, built upon 1.8 C codebase • Everything works out of the box unless depends_on?(Unmantained::Stuff) • Faster than 1.8: bytecode, JIT (no rt.jar :) • Strong encoding support • GC (still) sucksSunday, March 6, 2011
  8. 8. Rubinius • Ruby deserves to become first-class citizen • Most of the stdlib written in Ruby • Written in C++, bytecode, JIT • Built on LLVM, spinned off RubySpec • FFI subsystem for existing C extensions • http://rubini.us/2011/02/25/why-use-rubinius/Sunday, March 6, 2011
  9. 9. JRuby • Ruby built on the JVM - from 1.5 onwards • Fully interoperable • Works {on,with} Java {servers, libraries} • Call Java from Ruby and Ruby from Java • FFI subsystem for existing C extensions • Fast performance (JIT), Slow startup timeSunday, March 6, 2011
  10. 10. MacRuby • Sponsored by Apple, works only on OS X • Built upon Objective-C runtime and LLVM • A Ruby wrapper around CoreFoundation • JITted, compiles to binary code • Real GUIs can be built with itSunday, March 6, 2011
  11. 11. Others • IronRuby is Ruby on .NET • MagLev is distributed object persistence amongst networked Ruby processes • HotRuby is Ruby in the browser via Javascript and Flash (!) • RVM is the easiest way to try them all!Sunday, March 6, 2011
  12. 12. Install RVM • Run bash < <(curl http:// rvm.beginrescueend.com/ releases/rvm-install-head ) • Add [[ -s ~/.rvm/scripts/rvm ]] && source ~/.rvm/scripts/rvm to ~/.bashrc • Set!Sunday, March 6, 2011
  13. 13. RTFM http://rvm.beginrescueend.com/Sunday, March 6, 2011
  14. 14. Install something • rvm install 1.8 # the last 1.8 release • rvm install 1.9 # as above, for 1.9 • rvm install rbx # Rubinius • rvm install ree • rvm install jrubySunday, March 6, 2011
  15. 15. What have we got? $ rvm list rvm rubies macruby-0.6 [ x86_64 ] rbx-1.2.2-20110222 [ ] ree-1.8.7-2010.01 [ ] ruby-1.8.7-p330 [ ] ruby-1.9.2-p0 [ ]Sunday, March 6, 2011
  16. 16. System ruby $ rvm system $ type ruby ruby is /usr/bin/ruby $ ruby -v ruby 1.8.7 (2009-06-12 patchlevel 174) [universal- darwin10.0]Sunday, March 6, 2011
  17. 17. Let’s switch! # Caveat - exact ruby version $ rvm 1.9.2p0 $ type ruby ruby is /Users/vjt/.rvm/rubies/ ruby-1.9.2-p0/bin/ruby $ ruby -v ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64- darwin10.4.0]Sunday, March 6, 2011
  18. 18. Again $ rvm rbx-1.2.2 $ type ruby ruby is /Users/vjt/.rvm/rubies/ rbx-1.2.2-20110222/bin/ruby $ ruby -v rubinius 1.2.2 (1.8.7 release 2011-02-22 JI) [x86_64-apple- darwin10.5.0]Sunday, March 6, 2011
  19. 19. What am I using? $ rvm list rvm rubies macruby-0.6 [ x86_64 ] => rbx-1.2.2-20110222 [ ] ree-1.8.7-2010.01 [ ] ruby-1.8.7-p330 [ ] ruby-1.9.2-p0 [ ]Sunday, March 6, 2011
  20. 20. Upgrade? # Ruby $ rvm upgrade 1.9.2-p0 1.9.2- p180 # RVM itself $ rvm get headSunday, March 6, 2011
  21. 21. Gemsets $ rvm 1.9@someapp $ gem list *** LOCAL GEMS *** abstract (1.0.0) actionmailer (3.0.3) actionpack (3.0.3) activemodel (3.0.3) activerecord (3.0.3) ......Sunday, March 6, 2011
  22. 22. Gemsets, continued $ rvm 1.9@antani $ gem list *** LOCAL GEMS *** rake (0.8.7) $ Work in isolation on different apps with different dependencies.Sunday, March 6, 2011
  23. 23. Development • Put .rvmrc in the root of your project • Add it to the ignore list of your SCM • RVM will execute it when you enter the root $ cat .rvmrc rvm 1.8.7@ifad-members [ -z "$SYBASE" -a -x /opt/sybase/SYBASE.sh ] && { echo "loading sybase environment..." . /opt/sybase/SYBASE.sh }Sunday, March 6, 2011
  24. 24. Production? .bashrc: source ~/.rvm/scripts/rvm runner: exec sudo -i -H -u someuser bash -c echo; cd; exec unicorn -c config/unicorn.conf.rb -E production -DSunday, March 6, 2011
  25. 25. Production - more • Keep applications isolated from each others • Run applications requiring different interpreters along each other • Compile ruby with -static and run everything in a chroot() [coming soon] • Different users? Just use symlinksSunday, March 6, 2011
  26. 26. Thank you http://sindro.me/ http://twitter.com/vjt vjt@openssl.itSunday, March 6, 2011

×