ruby projects of interest for devops
Post on 16-May-2015
1.424 Views
Preview:
TRANSCRIPT
Ricardo Sanchez@ricardojsanchez
rsanchez.jayhawk@gmail.comsvDevOps Meetup – August 3, 2010
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, …
Short Ruby Intro
Ruby projects
Ruby Lab
Created by Yukihiro “Matz” MatsumotoFirst release 1995, renassaince 2005 Influenced by Python, Perl, and LispFocus on simplicity, productivity, and
developer happinessPrinciple of least surpriseMany interpreters
• MRI, YARV, Jruby, Rubinius, IronRuby, REE, MacRuby, MagLev, …
“Rubyist” are passionate and friendly people (Culture)
Object-Oriented With inheritance, mixins, and metaclasses
Interpreted
Dynamic typing and Duck typing
Everything is an object, no primitives
and many more “conventions”
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)
HTTP
Request
Router
Controller
Action
Parameters
Controller
Action
Action
Action
Model
Model
Model
Database
View
<h2>List of items:
<% @items.each do |item| %>
<li> Item: <%= item %></li>
<% end %>
</h2>
HTTP
Response
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
ActiveRecord
ActionController
ActionView
ActionMailer
ActiveSupport
… is all morphing as Rails3 is introduced
Command line tool • Install multiple ruby interpreters/versions E.g.: ruby (1.8.6-p399, 1.8.7-p187, …); jruby, rubinius
• Manage sets of gems („gemsets‟)
• Perform operations over installed interpreters/gemsets Avail for all *nix systems (require „bash‟) Quick examples (no sudo needed!)
• $ rvm install ruby-1.9.2, jruby Install• $ rvm use 1.9.1 Switching
• $ rvm gemset use rails3 Managing Gems• $ rvm 1.8.7, 1.9.1, jruby tests Running tests• $ rvm 1.8.7, 1.9.1 rake do:all Running rake task
http://rvm.beginrescueend.com
Tool for building and distributing virtualized development environments
Uses Oracle‟s VirtualBoxMain 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 environmentsTo install: # gem install vagranthttp://vagrantup.com
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
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
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
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
top related