SlideShare une entreprise Scribd logo
1  sur  114
Télécharger pour lire hors ligne
TorqueBox
    Ruby on Rails (and Rack)
    with Enterprise Goodness


Bob McWhirter       John Williams
Red Hat
Agenda: Part 1

   Who are these guys up here, talking to you?
   The Language Cusp
       Ruby vs Java
       Polyglotism
       Picture of Bill
   App servers for Java and Ruby
   Basic of Rails on TorqueBox
   Beyond Rails on TorqueBox
   Rack on TorqueBox
   Sinatra on TorqueBox
Agenda: Part 2

   Why TorqueBox
   Deploying with Bundles
   Deploying using Capistrano
Who is Bob McWhirter?

 Active in open-source
 Doing Java for a dozen years


 Doing Ruby for a handful of years


 Research & Prototyping group at JBoss
Who is John Williams?

 Early user of TorqueBox
 Interested in anything open-source


 Doing RoR for 4 years


 Doing web development for 8 years


 Wrote theme music to Star Wars
Who are you?
Java is facing
competition from
other languages
The Language Cusp
polyglot:
  a mixture or
  confusion of
   languages
Polyglotism


“Polyglotism
is the worst
idea I ever
heard”
-Bill Burke, coworker
Polyglotism                Ruby
                           Java
                          Scala
                          Groovy


Polyglotism may
indeed be bad
within a single
developer’s head   Ruby            Java

or even within a
single team.
Polyglotism


Underlying
infrastructure, if             Ruby

polyglotic, can      Other
                             JBoss


support a larger             Java
community and
market.
Services vs APIs


JBoss already has a full
suite of enterprise-grade
services.

        Web Container   Message Bus    SOAP



                        JBoss AS 5.x
Services vs APIs


Wrapped with standard
Java APIs...
                        Java Application
         Servlet API       JMS API         JAX-WS API



        Web Container    Message Bus         SOAP



                         JBoss AS 5.x
Services vs APIs


Why not wrap with Ruby
APIs?
                        Ruby Application
            Rails         TorqueBox        TorqueBox



        Web Container    Message Bus         SOAP



                         JBoss AS 5.x
Ruby App Server


Then, you end up with an
enterprise-grade Ruby app
server.
Ruby App Server
   in 4 Steps
Step 1




  Ruby on Rails
Step 1: Rails

   JRuby
       The guys got regular Rails running
        well under mongrel using JRuby
       There is also Warbler for creating
        deployable WAR files
       Gl*ssfish can run Rails apps in-
        place
Step 1: Rails




   But that’s not
   good enough
Step 1: Rails on JBoss

   JBoss
       Run Rails apps in-place under JBoss
       No WAR-creation required
       Runs alongside other JEE apps
       Runs alongside other Servlets within
        the same application
Step 1.5




           Databases
Step 1.5: Databases

   Since Java has the very nice JDBC
    drivers, let’s use them
   But don’t want to teach Rubyists JDBC
   Add a few ActiveRecord driver gems,
    and your Rails application accesses the
    DB through JDBC
Step 1.5: Databases

   No changes to config/database.yml
    required
   Rails is managing the connections
    itself
Step 1.75: Managed connections on Rails

   If’n you want to use a managed
    datasource deployed outside of the
    application...
       You can make changes to config/
        database.yml to use a datasource
       Datasource located via JNDI
Step 1.75: Managed connections on Rails

   You can even deploy your datasource
    from within your Rails application:
       config/mydb-ds.xml
Step 1.97: Deployment


  Deployment with
TorqueBox is slightly
different, but familiar
   to JBoss users.
Inversion of Deployment


Traditional Rails
   You pull HTTP functionality into
    your app
   You run your app, which listens
    on a port
Inversion of Deployment: Traditional
                                HTTP listener
                              web-server gems
                                mongrel, etc


           controllers              views
            controllers               views
              controllers               views


            models
             models
              models
               models

                     Rails Application
Inversion of Deployment


Rails in an app server
   Load your app into an app-server
    which already listens to HTTP
   App server routes some requests
    to your app or other apps
Inversion of Deployment: App server
                                                              HTTP listener




                                       controllers              views
                                        controllers               views
                                          controllers               views


         controllers                    models
                                  views models
          controllers               views models
            controllers               views models


          models                                 Rails Application
           models
            models
             models

                   Rails Application


                                  App Server
Deployment

   You don’t “start the app”
   You “deploy” it into an App Server
   TorqueBox comes with Rake tasks to
    help
       rake torquebox:rails:deploy
       rake torquebox:run
Deployment Descriptor
Simple Deployment

 application:
   RAILS_ENV: development
   RAILS_ROOT: /path/to/my/app
 web:
   context: /
Simple Deployment

 application:
   RAILS_ENV: development
   RAILS_ROOT: /path/to/my/app
 web:
   context: /
Simple Deployment

 application:
   RAILS_ENV: development
   RAILS_ROOT: /path/to/my/app
 web:
   context: /
Simple Deployment

 application:
   RAILS_ENV: development
   RAILS_ROOT: /path/to/my/app
 web:
   context: /
   host: www.myhost.com
Act like normal

   Once deployed, continue to edit
       Models
       Views
       Controllers
   Without re-deploying your app
Go beyond Rails
Step 2: Scheduled Jobs

Sometimes you’ve got a
 recurring task not associated
 with a web request
A cron job
Step 2: Scheduled Jobs

   Let’s use Quartz, it comes with JBoss

                         config/jobs.yml
     github.commit_poller:
       description: Poll GitHub
       job: Github::CommitPoller
       cron: 12 */10 * * * ?
Step 2: Scheduled Jobs

   We’re used to
       app/controllers/**.rb
       app/views/**.erb
       app/models/**.rb
   So let’s go with
     app/jobs/**.rb
Step 2: Scheduled Jobs

module GitHub
  class CommitPoller
      include TorqueBox::Jobs::Base
      def run()
        # do work here
      end
  end
end
Step 2: Scheduled Jobs

module GitHub
  class CommitPoller
      include TorqueBox::Jobs::Base
      def run()
        # do work here
      end
  end
end
Step 2: Scheduled Jobs

module GitHub
  class CommitPoller
      include TorqueBox::Jobs::Base
      def run()
        # do work here
      end
  end
end
Step 2: Scheduled Jobs

module GitHub
  class CommitPoller
      include TorqueBox::Jobs::Base
      def run()
        # do work here
      end
  end
end
Step 2: Scheduled Jobs

   Jobs will deploy with your app
   Jobs will undeploy with your app
   Jobs have complete access to your
    ActiveRecord models
   Jobs have complete access to your lib/
    classes
   Jobs can be live edited like anything else
Well, that was easy
Step 3: Async Task Queues

   Sometimes you want something non-
    recurring to happen
   Perhaps outside of the context of a
    web request
   Perhaps triggered by a web request,
    though
That sounds like a
  message queue.

JBoss has one of those.
Step 3: Async Task Queues

   Like you’d expect...
     app/queues/**.rb


   A class per queue
   A method per task
Step 3: Async Task Queues

 class MyQueue
   include TorqueBox::Queue::Base


   def do_something(payload={})
       # do work here
   end
 end
Step 3: Async Task Queues

 class MyQueue
   include TorqueBox::Queue::Base


   def do_something(payload={})
       # do work here
   end
 end
Step 3: Async Task Queues

 class MyQueue
   include TorqueBox::Queue::Base


   def do_something(payload={})
       # do work here
   end
 end
Step 3: Async Task Queues

 class MyQueue
   include TorqueBox::Queue::Base


   def do_something(payload={})
       # do work here
   end
 end
Step 3: Enqueuing

MyQueue.enqueue(:do_something,{
     :quantity=>100,
     :cheese=>:gouda
})
Step 3: Enqueuing

MyQueue.enqueue(:do_something,{
     :quantity=>100,
     :cheese=>:gouda
})
Step 3: Enqueuing

MyQueue.enqueue(:do_something,{
     :quantity=>100,
     :cheese=>:gouda
})
Step 3: Async Task Queues

   A JMS queue is created for each
    queue class
   The payload is anything that can be
    serialized into bytes
       Including ActiveRecord models
Sometimes you’ve
got to use SOAP
Step 4: SOAP

   Sure, SOAP is obnoxious
   SOAP from Ruby is obnoxious, and
    underpowered
   Apache CXF is some good stuff
   Sometimes you have to do SOAP, so
    at least you can do it from Ruby
Step 4: SOAP

   Goal is not to generate WSDL from
    Ruby endpoints
   Instead, only supports binding Ruby
    endpoints to existing WSDL
   If you’re doing greenfield
    development, prefer REST. Or
    sockets. Or pigeons.
Step 4: SOAP

   As you’d expect, again...
     app/endpoints/**.rb


       app/endpoints/**.wsdl
Step 4: SOAP

module Amazon
  class Ec2Endpoint

    include TorqueBox::Endpoints::Base

  end
end
Step 4: SOAP
module Amazon

 class Ec2Endpoint

      include TorqueBox::Endpoints::Base

        endpoint_configuration do
           target_namespace 'http://ec2.amazonaws.com/doc/2008-12-01/'
           port_name                  'AmazonEC2'
           security do
              inbound do
                 verify_timestamp
                 verify_signature
              end
           end
        end
 end

end
Step 4: SOAP
module Amazon

 class Ec2Endpoint

      include TorqueBox::Endpoints::Base

        endpoint_configuration do
           target_namespace 'http://ec2.amazonaws.com/doc/2008-12-01/'
           port_name                  'AmazonEC2'
           security do
              inbound do
                 verify_timestamp
                 verify_signature
              end
           end
        end
 end

end
Step 4: SOAP
module Amazon

 class Ec2Endpoint

      include TorqueBox::Endpoints::Base

        endpoint_configuration do
           target_namespace 'http://ec2.amazonaws.com/doc/2008-12-01/'
           port_name                  'AmazonEC2'
           security do
              inbound do
                 verify_timestamp
                 verify_signature
              end
           end
        end
 end

end
Step 4: SOAP
module Amazon

 class Ec2Endpoint

       def describe_instances

         response = create_response

         request.instancesSet.each do |instance_id|
           reservation_info = response.reservationSet.create
           reservation_info.ownerId = ...
         end

         return response

       end
 end

end
Step 4: SOAP

   TorqueBox provides...
       full request/response XSD data-
        binding (like JAXB)
       security, such as X.509 signature
        verification
Now you have a pretty
nice Ruby app server.

   Not too shabby.
Wait, that was just
Ruby on Rails...
Anything Rack

TorqueBox uses Rack
 plumbing to handle RoR
Now Soon will allow

 deploying of arbitrary Rack
 applications
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
config.ru

app = lambda{|env|
            [ 200,
             {'Content-Type'=>'text/html'},
             'Hello World']
       }
run app
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
*-rack.yml

application:
  RACK_ROOT: /path/to/myapp
  RACK_ENV: production
  rackup: config.ru

web:
  host: myapp.com
Sinatra!
config.ru

require 'app'


use TorqueBox::Rack::Reloader,
      File.dirname(__FILE__)


run Sinatra::Application
config.ru

require 'app'


use TorqueBox::Rack::Reloader,
      File.dirname(__FILE__)


run Sinatra::Application
config.ru

require 'app'


use TorqueBox::Rack::Reloader,
      File.dirname(__FILE__)


run Sinatra::Application
config.ru

require 'app'


use TorqueBox::Rack::Reloader,
      File.dirname(__FILE__)


run Sinatra::Application
app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello world"
end
app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello world"
end
app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello world"
end
app.rb

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello world"
end
Questions?
Deploying Rails
Applications to
 TorqueBox
Why TorqueBox?
Why TorqueBox?
Rails Application           Rails Application


  20 Mongrels                 20 Mongrels


                TorqueBox
  Rails Application     Rails Application


 Capistrano Deployed    Bundle Deployed
Methods to Deploy


Application Bundle   OR Capistrano
Application Bundle


What is an Application Bundle?
Application Bundle

Web Application Archive (WAR) of
     your Rails application.


  It will be created with a .rails
            file extension.
Application Bundle

   How do I create it?
Application Bundle

        App Bundle Rake tasks:


   rake torquebox:rails:bundle
rake torquebox:rails:deploy:bundle
Application Bundle

    What to do next?
Application Bundle

Drop it in your TorqueBox deploy directory.

                   OR
 Deploy it locally using the Rake tasks using:
rake torquebox:rails:deploy:bundle
Application Bundle

     Don’t forget...
Application Bundle

     config/web.yml

        AND
   config/rails-env.yml
config/web.yml


Host   AND   Context
config/web.yml

       Example:


  host: torquebox.org
  context: /
config/rails-env.yml


  Rails Environment
config/rails-env.yml

        Example:


  RAILS_ENV: production
Capistrano


          Complete Example:
http://github.com/torquebox/ballast-rails
Capistrano
         Supports:

daemontools   AND    init.d
Capistrano

      Don’t Forget...


require 'recipes/torquebox'
Questions?

Contenu connexe

Tendances

Composing Project Dependencies
Composing Project DependenciesComposing Project Dependencies
Composing Project DependenciesDerek Gallo
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Railsmithunsasidharan
 
Serverless Beyond Functions - CTO Club Made in JLM
Serverless Beyond Functions - CTO Club Made in JLMServerless Beyond Functions - CTO Club Made in JLM
Serverless Beyond Functions - CTO Club Made in JLMBoaz Ziniman
 
How to generate a rest application - DevFest Vienna 2016
How to generate a rest application - DevFest Vienna 2016How to generate a rest application - DevFest Vienna 2016
How to generate a rest application - DevFest Vienna 2016johannes_fiala
 
Ruby On Rails Presentation
Ruby On Rails PresentationRuby On Rails Presentation
Ruby On Rails PresentationChanHan Hy
 
All the Laravel Things – Up & Running to Making $$
All the Laravel Things – Up & Running to Making $$All the Laravel Things – Up & Running to Making $$
All the Laravel Things – Up & Running to Making $$Joe Ferguson
 
Console Apps: php artisan forthe:win
Console Apps: php artisan forthe:winConsole Apps: php artisan forthe:win
Console Apps: php artisan forthe:winJoe Ferguson
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework tola99
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginnersAdam Englander
 
Knowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkKnowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkBukhori Aqid
 
All Aboard for Laravel 5.1
All Aboard for Laravel 5.1All Aboard for Laravel 5.1
All Aboard for Laravel 5.1Jason McCreary
 
The Guardian Open Platform Content API: Implementation
The Guardian Open Platform Content API: ImplementationThe Guardian Open Platform Content API: Implementation
The Guardian Open Platform Content API: ImplementationThe Guardian Open Platform
 
Java Intro: Unit1. Hello World
Java Intro: Unit1. Hello WorldJava Intro: Unit1. Hello World
Java Intro: Unit1. Hello WorldYakov Fain
 
Ruby an overall approach
Ruby an overall approachRuby an overall approach
Ruby an overall approachFelipe Schmitt
 
Web Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the futureWeb Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the futureToru Kawamura
 

Tendances (20)

Composing Project Dependencies
Composing Project DependenciesComposing Project Dependencies
Composing Project Dependencies
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
Serverless Beyond Functions - CTO Club Made in JLM
Serverless Beyond Functions - CTO Club Made in JLMServerless Beyond Functions - CTO Club Made in JLM
Serverless Beyond Functions - CTO Club Made in JLM
 
How to generate a rest application - DevFest Vienna 2016
How to generate a rest application - DevFest Vienna 2016How to generate a rest application - DevFest Vienna 2016
How to generate a rest application - DevFest Vienna 2016
 
Ruby On Rails Presentation
Ruby On Rails PresentationRuby On Rails Presentation
Ruby On Rails Presentation
 
All the Laravel Things – Up & Running to Making $$
All the Laravel Things – Up & Running to Making $$All the Laravel Things – Up & Running to Making $$
All the Laravel Things – Up & Running to Making $$
 
Top ten of PHP 7.4
Top ten of PHP 7.4Top ten of PHP 7.4
Top ten of PHP 7.4
 
Console Apps: php artisan forthe:win
Console Apps: php artisan forthe:winConsole Apps: php artisan forthe:win
Console Apps: php artisan forthe:win
 
Avik_RailsTutorial
Avik_RailsTutorialAvik_RailsTutorial
Avik_RailsTutorial
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginners
 
Knowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkKnowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP framework
 
Maven
MavenMaven
Maven
 
All Aboard for Laravel 5.1
All Aboard for Laravel 5.1All Aboard for Laravel 5.1
All Aboard for Laravel 5.1
 
Maven
MavenMaven
Maven
 
The Guardian Open Platform Content API: Implementation
The Guardian Open Platform Content API: ImplementationThe Guardian Open Platform Content API: Implementation
The Guardian Open Platform Content API: Implementation
 
Java Intro: Unit1. Hello World
Java Intro: Unit1. Hello WorldJava Intro: Unit1. Hello World
Java Intro: Unit1. Hello World
 
Ruby an overall approach
Ruby an overall approachRuby an overall approach
Ruby an overall approach
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Web Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the futureWeb Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the future
 

Similaire à TorqueBox

Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on RailsAlessandro DS
 
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & CucumberUdaya Kiran
 
Instruments ruby on rails
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on railspmashchak
 
Rails 5 – most effective features for apps upgradation
Rails 5 – most effective features for apps upgradationRails 5 – most effective features for apps upgradation
Rails 5 – most effective features for apps upgradationAndolasoft Inc
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09Michael Neale
 
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017Amazon Web Services
 
Capybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyCapybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyDeepak Chandella
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance JavaVikas Goyal
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Railsanides
 
JRuby in the enterprise
JRuby in the enterpriseJRuby in the enterprise
JRuby in the enterpriseJerry Gulla
 
Ruby Rails Web Development
Ruby Rails Web DevelopmentRuby Rails Web Development
Ruby Rails Web DevelopmentSonia Simi
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Nilesh Panchal
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsJim Jeffers
 

Similaire à TorqueBox (20)

Dev streams2
Dev streams2Dev streams2
Dev streams2
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
 
Instruments ruby on rails
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on rails
 
Rails 5 – most effective features for apps upgradation
Rails 5 – most effective features for apps upgradationRails 5 – most effective features for apps upgradation
Rails 5 – most effective features for apps upgradation
 
RoR guide_p1
RoR guide_p1RoR guide_p1
RoR guide_p1
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09
 
Ruby Rails Web Development.pdf
Ruby Rails Web Development.pdfRuby Rails Web Development.pdf
Ruby Rails Web Development.pdf
 
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
Building CI/CD Pipelines for Serverless Applications - SRV302 - re:Invent 2017
 
Capybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyCapybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using ruby
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
JRuby in the enterprise
JRuby in the enterpriseJRuby in the enterprise
JRuby in the enterprise
 
Ruby Rails Web Development
Ruby Rails Web DevelopmentRuby Rails Web Development
Ruby Rails Web Development
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
 
Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
 
BPMS1
BPMS1BPMS1
BPMS1
 
BPMS1
BPMS1BPMS1
BPMS1
 

Plus de bobmcwhirter

Microservices with JBoss EAP & OpenShift
Microservices with JBoss EAP & OpenShiftMicroservices with JBoss EAP & OpenShift
Microservices with JBoss EAP & OpenShiftbobmcwhirter
 
The Life & Journey of a Professional Open-Source Developer
The Life & Journey of a Professional Open-Source DeveloperThe Life & Journey of a Professional Open-Source Developer
The Life & Journey of a Professional Open-Source Developerbobmcwhirter
 
Complex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBoxComplex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBoxbobmcwhirter
 
TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011bobmcwhirter
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...bobmcwhirter
 
JBoss Developer Webinar: Cloud: BoxGrinder & SteamCannon
JBoss Developer Webinar: Cloud: BoxGrinder & SteamCannonJBoss Developer Webinar: Cloud: BoxGrinder & SteamCannon
JBoss Developer Webinar: Cloud: BoxGrinder & SteamCannonbobmcwhirter
 
TorqueBox for Rubyists
TorqueBox for RubyistsTorqueBox for Rubyists
TorqueBox for Rubyistsbobmcwhirter
 

Plus de bobmcwhirter (7)

Microservices with JBoss EAP & OpenShift
Microservices with JBoss EAP & OpenShiftMicroservices with JBoss EAP & OpenShift
Microservices with JBoss EAP & OpenShift
 
The Life & Journey of a Professional Open-Source Developer
The Life & Journey of a Professional Open-Source DeveloperThe Life & Journey of a Professional Open-Source Developer
The Life & Journey of a Professional Open-Source Developer
 
Complex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBoxComplex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBox
 
TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
 
JBoss Developer Webinar: Cloud: BoxGrinder & SteamCannon
JBoss Developer Webinar: Cloud: BoxGrinder & SteamCannonJBoss Developer Webinar: Cloud: BoxGrinder & SteamCannon
JBoss Developer Webinar: Cloud: BoxGrinder & SteamCannon
 
TorqueBox for Rubyists
TorqueBox for RubyistsTorqueBox for Rubyists
TorqueBox for Rubyists
 

Dernier

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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 WoodJuan lago vázquez
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
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.pdfsudhanshuwaghmare1
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
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 educationjfdjdjcjdnsjd
 

Dernier (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
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
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
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
 

TorqueBox