SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
RVM
                        Cut Rubies With Ease




Sunday, March 6, 2011
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 more



Sunday, March 6, 2011
Why?



Sunday, March 6, 2011
Ecosystem
                    • MRI (1.8)
                    • YARV (1.9)
                    • REE
                    • Rubinius
                    • JRuby
                    • MacRuby
                    • IronRuby, MagLev, HotRuby (!)
Sunday, March 6, 2011
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 sucks
Sunday, March 6, 2011
REE (1.8)

                    • From Passenger (Apache/Nginx module for
                        Rails apps) devs - phusion.nl
                    • COW friendly
                    • Google’s tcmalloc
                    • Union Station - released yesterday

Sunday, March 6, 2011
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) sucks
Sunday, March 6, 2011
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
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 time
Sunday, March 6, 2011
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 it

Sunday, March 6, 2011
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
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
RTFM


                        http://rvm.beginrescueend.com/




Sunday, March 6, 2011
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 jruby




Sunday, March 6, 2011
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
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
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
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
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
Upgrade?
                        # Ruby
                        $ rvm upgrade 1.9.2-p0 1.9.2-
                        p180


                        # RVM itself
                        $ rvm get head




Sunday, March 6, 2011
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
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
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
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 -D'




Sunday, March 6, 2011
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 symlinks
Sunday, March 6, 2011
Thank you

                        http://sindro.me/
                        http://twitter.com/vjt


                        vjt@openssl.it



Sunday, March 6, 2011

Contenu connexe

Tendances

ZK_Arch_notes_20081121
ZK_Arch_notes_20081121ZK_Arch_notes_20081121
ZK_Arch_notes_20081121
WANGCHOU LU
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02
Hiroshi SHIBATA
 
Introduction to JRuby
Introduction to JRubyIntroduction to JRuby
Introduction to JRuby
Amit Solanki
 
20140425 ruby conftaiwan2014
20140425 ruby conftaiwan201420140425 ruby conftaiwan2014
20140425 ruby conftaiwan2014
Hiroshi SHIBATA
 
Adventures of java developer in ruby world
Adventures of java developer in ruby worldAdventures of java developer in ruby world
Adventures of java developer in ruby world
Orest Ivasiv
 
20140419 oedo rubykaigi04
20140419 oedo rubykaigi0420140419 oedo rubykaigi04
20140419 oedo rubykaigi04
Hiroshi SHIBATA
 

Tendances (20)

Gems on Ruby
Gems on RubyGems on Ruby
Gems on Ruby
 
The Future of Dependency Management for Ruby
The Future of Dependency Management for RubyThe Future of Dependency Management for Ruby
The Future of Dependency Management for Ruby
 
How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?
 
ZK_Arch_notes_20081121
ZK_Arch_notes_20081121ZK_Arch_notes_20081121
ZK_Arch_notes_20081121
 
What's new in RubyGems3
What's new in RubyGems3What's new in RubyGems3
What's new in RubyGems3
 
Gems on Ruby
Gems on RubyGems on Ruby
Gems on Ruby
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02
 
The Future of Bundled Bundler
The Future of Bundled BundlerThe Future of Bundled Bundler
The Future of Bundled Bundler
 
Ruby Security the Hard Way
Ruby Security the Hard WayRuby Security the Hard Way
Ruby Security the Hard Way
 
Invokedynamic in 45 Minutes
Invokedynamic in 45 MinutesInvokedynamic in 45 Minutes
Invokedynamic in 45 Minutes
 
Introduction to JRuby
Introduction to JRubyIntroduction to JRuby
Introduction to JRuby
 
Introduction to JRuby
Introduction to JRubyIntroduction to JRuby
Introduction to JRuby
 
20140918 ruby kaigi2014
20140918 ruby kaigi201420140918 ruby kaigi2014
20140918 ruby kaigi2014
 
20140425 ruby conftaiwan2014
20140425 ruby conftaiwan201420140425 ruby conftaiwan2014
20140425 ruby conftaiwan2014
 
Adventures of java developer in ruby world
Adventures of java developer in ruby worldAdventures of java developer in ruby world
Adventures of java developer in ruby world
 
20140419 oedo rubykaigi04
20140419 oedo rubykaigi0420140419 oedo rubykaigi04
20140419 oedo rubykaigi04
 
OSS Security the hard way
OSS Security the hard wayOSS Security the hard way
OSS Security the hard way
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0
 
近未来的並列 LL
近未来的並列 LL近未来的並列 LL
近未来的並列 LL
 
#dd12 IBM Lotus Traveler High Availability in a nutshell
#dd12 IBM Lotus Traveler High Availability in a nutshell#dd12 IBM Lotus Traveler High Availability in a nutshell
#dd12 IBM Lotus Traveler High Availability in a nutshell
 

En vedette

Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + Django
Azamat Tokhtaev
 

En vedette (7)

Panmind at Ruby Social Club Milano
Panmind at Ruby Social Club MilanoPanmind at Ruby Social Club Milano
Panmind at Ruby Social Club Milano
 
Zarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danychZarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danych
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + Django
 
Liquibase - Zarządzanie zmianami w relacyjnych bazach danych
Liquibase - Zarządzanie zmianami w relacyjnych bazach danychLiquibase - Zarządzanie zmianami w relacyjnych bazach danych
Liquibase - Zarządzanie zmianami w relacyjnych bazach danych
 
Retrospekcja warsztat Agile3M
Retrospekcja warsztat Agile3MRetrospekcja warsztat Agile3M
Retrospekcja warsztat Agile3M
 
Failcon Atlanta - A Post-mortem of a healthcare startup
Failcon Atlanta - A Post-mortem of a healthcare startupFailcon Atlanta - A Post-mortem of a healthcare startup
Failcon Atlanta - A Post-mortem of a healthcare startup
 
Penetrationtestinglovesfreesoftware libreplaner2017-christianfernandez-hispag...
Penetrationtestinglovesfreesoftware libreplaner2017-christianfernandez-hispag...Penetrationtestinglovesfreesoftware libreplaner2017-christianfernandez-hispag...
Penetrationtestinglovesfreesoftware libreplaner2017-christianfernandez-hispag...
 

Similaire à RVM and Ruby Interpreters @ RSC Roma 03/2011

UCLUG TorqueBox - 03/08/2011
UCLUG TorqueBox - 03/08/2011UCLUG TorqueBox - 03/08/2011
UCLUG TorqueBox - 03/08/2011
tobiascrawley
 
JRuby - The Best of Java and Ruby
JRuby - The Best of Java and RubyJRuby - The Best of Java and Ruby
JRuby - The Best of Java and Ruby
Evgeny Rahman
 
JRuby Hot Topics 2008-12-12
JRuby Hot Topics 2008-12-12JRuby Hot Topics 2008-12-12
JRuby Hot Topics 2008-12-12
Koichiro Ohba
 
Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1
Henry S
 

Similaire à RVM and Ruby Interpreters @ RSC Roma 03/2011 (20)

Developing Cocoa Applications with macRuby
Developing Cocoa Applications with macRubyDeveloping Cocoa Applications with macRuby
Developing Cocoa Applications with macRuby
 
Ruby on rails toolbox
Ruby on rails toolboxRuby on rails toolbox
Ruby on rails toolbox
 
UCLUG TorqueBox - 03/08/2011
UCLUG TorqueBox - 03/08/2011UCLUG TorqueBox - 03/08/2011
UCLUG TorqueBox - 03/08/2011
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0
 
The story of language development
The story of language developmentThe story of language development
The story of language development
 
Setup ruby
Setup rubySetup ruby
Setup ruby
 
Practical JRuby
Practical JRubyPractical JRuby
Practical JRuby
 
Ruby On Rails Ecosystem
Ruby On Rails EcosystemRuby On Rails Ecosystem
Ruby On Rails Ecosystem
 
An introduction to Rails 3
An introduction to Rails 3An introduction to Rails 3
An introduction to Rails 3
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQL
 
JRuby - The Best of Java and Ruby
JRuby - The Best of Java and RubyJRuby - The Best of Java and Ruby
JRuby - The Best of Java and Ruby
 
JRuby Hot Topics 2008-12-12
JRuby Hot Topics 2008-12-12JRuby Hot Topics 2008-12-12
JRuby Hot Topics 2008-12-12
 
An introduction to the ruby ecosystem
An introduction to the ruby ecosystemAn introduction to the ruby ecosystem
An introduction to the ruby ecosystem
 
Red Dirt Ruby Conference
Red Dirt Ruby ConferenceRed Dirt Ruby Conference
Red Dirt Ruby Conference
 
The Future of library dependency management of Ruby
 The Future of library dependency management of Ruby The Future of library dependency management of Ruby
The Future of library dependency management of Ruby
 
Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1
 
Using Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRBUsing Java from Ruby with JRuby IRB
Using Java from Ruby with JRuby IRB
 
Using rbenv in Production
Using rbenv in ProductionUsing rbenv in Production
Using rbenv in Production
 
Ruby Throwdown Hosted by Engine Yard
Ruby Throwdown Hosted by Engine YardRuby Throwdown Hosted by Engine Yard
Ruby Throwdown Hosted by Engine Yard
 
Fate of Ruby 1.8
Fate of Ruby 1.8Fate of Ruby 1.8
Fate of Ruby 1.8
 

Dernier

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Dernier (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 

RVM and Ruby Interpreters @ RSC Roma 03/2011

  • 1. RVM Cut Rubies With Ease Sunday, March 6, 2011
  • 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 more Sunday, March 6, 2011
  • 4. Ecosystem • MRI (1.8) • YARV (1.9) • REE • Rubinius • JRuby • MacRuby • IronRuby, MagLev, HotRuby (!) Sunday, March 6, 2011
  • 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 sucks Sunday, March 6, 2011
  • 6. REE (1.8) • From Passenger (Apache/Nginx module for Rails apps) devs - phusion.nl • COW friendly • Google’s tcmalloc • Union Station - released yesterday Sunday, March 6, 2011
  • 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) sucks Sunday, March 6, 2011
  • 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. 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 time Sunday, March 6, 2011
  • 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 it Sunday, March 6, 2011
  • 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. 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. RTFM http://rvm.beginrescueend.com/ Sunday, March 6, 2011
  • 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 jruby Sunday, March 6, 2011
  • 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. 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. 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. 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. 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. Upgrade? # Ruby $ rvm upgrade 1.9.2-p0 1.9.2- p180 # RVM itself $ rvm get head Sunday, March 6, 2011
  • 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. 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. 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. 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 -D' Sunday, March 6, 2011
  • 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 symlinks Sunday, March 6, 2011
  • 26. Thank you http://sindro.me/ http://twitter.com/vjt vjt@openssl.it Sunday, March 6, 2011