2. Operations Architect for PlayHaven
Started with Ruby/Rails in late 2008
Networking guy prior to that
• Linux/Unix, kernel+user software development
• C/C++, Routers/Switches, …
4. Created by Yukihiro “Matz” Matsumoto
First release 1995, renassaince 2005
Influenced by Python, Perl, and Lisp
Focus on simplicity, productivity, and
developer happiness
Principle of least surprise
Many interpreters
• MRI, YARV, Jruby, Rubinius, IronRuby, REE, MacRuby,
MagLev, …
“Rubyist” are
passionate and friendly
people (Culture)
5. Object-Oriented
With inheritance, mixins, and metaclasses
Interpreted
Dynamic typing and Duck typing
Everything is an object, no primitives
and many more “conventions”
6. Created by DHH (released 2004)
Web application framework
Model-View-Controller (MVC) pattern
Stable 2.3.8, Beta 3.0 RC (just released)
Principles
• Convention over Configuration (CoC)
• Don‟t Repeat Yourself (DRY)
REST (Representational State Transfer)
7. Database
Router Controller Model
Model
HTTP Controller Action
Action Action Model
Request
Parameters Action
View
<h2>List of items:
HTTP <% @items.each do |item| %>
Response <li> Item: <%= item %></li>
<% end %>
</h2>
8. Request made from browser to URL
http://localhost:3000/users/show/1
Rails receives request on port 3000
• Server invokes dispatcher (routing)
:controller = users, :action = show, :id = 1
• Action fetches model object from database
• Action renders view which generates HTML
Rails sends response (HTML page) back
11. Tool for building and distributing
virtualized development environments
Uses Oracle‟s VirtualBox
Main features
• Automated provisioning using chef
• Forward port to host machine
• Full SSH access to created environments
• Shared folders between host/guest(s)
• Package environments into distributable boxes
Great for distributable dev/qa environments
To install: # gem install vagrant
http://vagrantup.com
12. Task automation tool on remote servers
Features
• Restart particular service on multiple servers once
$ cap HOSTS=„www-1,www-2‟
COMMAND=„/etc/init.d/apache2 restart” invoke
• Check state of service/resource (memory,cpu) that is not
monitored
$ cap HOSTS=„www-1,www-2‟ COMMAND=„grep MemTotal
/proc/meminfo‟ invoke
• Run command in multiple servers and monitor output
• Systems deployment tasks (e.g., Rails deployments)
To install: # gem install capistrano
http://capify.org
13. Problem: how to manage many servers
Solution: consolidate access to infrastructure data for
all nodes („systems integration‟)
Chef provides configuration, integration, and
operations as code (written in Ruby)
• Treat infrastructure like software development projects
Modes: solo, client/server
Concepts
• Nodes, Roles, Cookbooks, Recipes, Resources, Attributes
Opscode offerings
• Chef - Server Configuration Management Tool (API & DSL)
• Opscode Platform (hosted chef server)
http://www.opscode.com
14. Books
• Programming Ruby 1.9
• The Ruby Programming Language
• Practical Ruby for Systems Administration
• Everyday Scripting with Ruby
Online Learning
• http://rubylearning.org (Free course)
• http://github.com/edgecase/ruby_koans (FUN)
Blogs
• http://rubyinside.com
• http://rubyflow.com
15. Installation (all platforms)
• http://www.wiki.devchix.com/index.php?title=Work
shop_Installation_Notes
Ruby, RubyGems
Editor (your choice)
Exercise
• Open irb
$ irb
>> puts “Hello world”
• Save previous line on hello.rb, chmod +x, and run
$ ruby hello.rb