rapid development with ruby, jruby and rails
TRANSCRIPT
![Page 1: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/1.jpg)
Rapid Development with Ruby, JRuby and Rails
Brian LeonardSoftware Engineer
Sun Microsystems, Inc.
![Page 2: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/2.jpg)
Overall Presentation Goal
Gain a basic understanding of the
Ruby on Rails concepts
![Page 3: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/3.jpg)
Speaker’s Qualifications
Brian Leonard began working with enterprise Java in 1997 at NetDynamics. Today he's a technology evangelist at Sun Microsystems.
Brian developed the Ruby on Rails tutorial series on netbeans.org which is used at the basis for this presentation.
![Page 4: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/4.jpg)
4
What is Rails?
An MVC framework for
web applications
![Page 5: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/5.jpg)
5
The Features of Rails
Metaprogramming Active Record Convention over Configuration Scaffolding Easy Ajax Rapid Feedback Loop
![Page 6: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/6.jpg)
6
Rails Naming Conventions
Class names are usually CamelCase RocketShip
File names are lower_case rocket_ship.rb
Model names are singular Rocket, Person
Table names are plural rockets, people
![Page 7: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/7.jpg)
7
Ruby/Rails Terminology
Rake Ruby Make
Symbols Often used in place of a string
Generators Scripts that create project artifacts (i.e., models,
views and controllers) The Flash
A way to pass objects between requests A temporary scratchpad Commonly used for IDs
:rocket, :edit
flash[:post_id] = @params[:id]
![Page 8: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/8.jpg)
8
Rails File Types
Extension Type*.rb Ruby file
Embedded Ruby file Configuration
*.erb*.yml*
*YAML Ain't Markup Language
![Page 9: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/9.jpg)
9
Symbols
Self-descriptive immediate objects like the number 3, for example.
Atomic, immutable and unique Can't be parsed or modified All references to a symbol refer to the same object
:foo.equals?(:foo) #True 'foo'.equals?('foo') #False
Always interchangeable with strings No right or wrong usage Easier to type Stand out in the editor The different syntax can distinguish keys from
values :name => 'Brian'
![Page 10: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/10.jpg)
10
Symbols
Often used to refer to: Method names (:post_comment) Options in a method argument list (:name, :title) Hash keys (:name => 'Brian')
Symbols are not: Variables
They don't hold references to other objects Strings
Although you can get their string representation
![Page 11: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/11.jpg)
11
So really, what is a symbol?
Simply, a symbol is something that you use to represent names and strings.
What this boils down to is a way to efficiently have descriptive names while saving the space one would use to generate a string for each naming instance.
Useful whenever you’re going to be reusing a word over and over to represent something else
http://glu.ttono.us/articles/2005/08/19/understanding-ruby-symbols
![Page 12: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/12.jpg)
12
How do I use it?
![Page 13: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/13.jpg)
Outline
Creating the Project Schema Migrations Validation The View Database Relationships Ajax Java Deployment
![Page 14: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/14.jpg)
Outline
Creating the Project Schema Migrations Validation The View Database Relationships Ajax Java Deployment
![Page 15: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/15.jpg)
Creating a Basic Rails Project
Create your project rails #{project name}
Create your database rake > db > create > all Will create the database(s) as defined in
database.yml: #{project name}_development #{project name}_test #{project name}_production
![Page 16: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/16.jpg)
Creating a Basic Rails Project
Scaffold your first resource ruby script/generate scaffold #{model name} #{attribute pairs}
Follow conventions (singular form) Execute the database migrations
rake db:migrate
![Page 17: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/17.jpg)
Creating a Basic Rails Project - Example
rails blog rake db > create; ruby script/generate scaffold post title:string
rake db:migrate ruby script/server
Test: http://localhost:3000/posts
![Page 18: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/18.jpg)
DEMO
Rails Application – Iteration 1: Application, Database and
Initial Scaffolding
![Page 19: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/19.jpg)
Outline
Creating the Project Schema Migrations Validation The View Database Relationships Ajax Java Deployment
![Page 20: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/20.jpg)
20
Database Migrations
![Page 21: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/21.jpg)
The Evolving Data Model
Our requirements have changed! Our database needs another field
Migrations to the rescue ruby script/generate migration #{migration name} #{attribute pairs}
For example: ruby script/generate migration AddBodyToPosts body:text
class AddBody < ActiveRecord::Migration def self.up
add_column :post, :body, :text endend
![Page 22: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/22.jpg)
DEMO
Rails Application – Iteration 2: Database Migrations
![Page 23: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/23.jpg)
Outline
Creating the Project Schema Migrations Validation The View Database Relationships Ajax Java Deployment
![Page 24: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/24.jpg)
Validation
Defined in the model – the gatekeeper of our data
Common methods: validates_presence_of validates_numericality_of validates_uniqueness_of validates_format_of validates_length_of
Code Templates exist for most of these
![Page 25: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/25.jpg)
Validation
![Page 26: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/26.jpg)
DEMO
Rails Application – Iteration 3: Validation
![Page 27: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/27.jpg)
Outline
Creating the Project Schema Migrations Validation The View Database Relationships Ajax Java Deployment
![Page 28: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/28.jpg)
Understand the Rails URL
Controller ID
http://domain/#{controller}/#{id} and/or #{action}
![Page 29: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/29.jpg)
erb Templates
<p> <b>Title:</b> <%=h @post.title %></p><p> <b>Body:</b> <%=h @post.body %></p><%= link_to 'Edit', edit_post_path(@post) %> |<%= link_to 'Back', posts_path %>
![Page 30: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/30.jpg)
Application Flow
def edit @post = Post.find( params[:id]) end
<% form_for(@post) do |f| %> <p><b>Title</b><br /> <%= f.text_field :title %></p> <p><b>Body </b><br /> <%= f.text_area :body %></p> <p><%= submit “Update” %></p><% end %>
def update @post = Post.find(params[:id]) if @post.update_attributes(params[:post]) redirect_to(@post) else render :action => “edit” end end
posts_controller.rb
edit.html.erb
posts_controller.rb
1
2
![Page 31: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/31.jpg)
DEMO
Rails Application – Iteration 4: The View
![Page 32: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/32.jpg)
Outline
Creating the Project Schema Migrations Validation The View Database Relationships Ajax Java Deployment
![Page 33: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/33.jpg)
Model Relationships
Declaring relationships has_many belongs_to
![Page 34: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/34.jpg)
Model Relationships
For example:
Allows for:
class Post < ActiveRecord::Base has_many :commentsend
class Comment < ActiveRecord::Base belongs_to :postend
# Fetch all comments for post id 1post = Post.find(1)comments = post.comments.collect
![Page 35: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/35.jpg)
DEMO
Rails Application – Iteration 5: Model Relationships
![Page 36: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/36.jpg)
Outline
Creating the Project Schema Migrations Validation The View Database Relationships Ajax Java Deployment
![Page 37: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/37.jpg)
AJAX
Prototype and script.aculo.us libraries are included with Rails Others can be easily added
![Page 38: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/38.jpg)
Prepare the Application for AJAX
Move the html you would like to be dynamic into a partial template.
“Partials” Chunks of rhtml that act as methods Prepended with an underscore.
For example: _comment.rhtml Usage:
Test!
<%= render :partial => "comment", :object => comment %>
![Page 39: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/39.jpg)
First Steps to AJAX
Include the Prototype and script.aculo.us Javascript libraries
Replace form_tag (does an HTTP POST) with form_remote_tag (does an XMLHTTPRequest)
Test!
<%= javascript_include_tag :defaults %>
![Page 40: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/40.jpg)
Steps to AJAX
Use render :update construct to handle the XMLHTTPRequest
render :update allows you to use Ruby commands to generate JavaScript
Create a DOM id to reference
Test!
render :update do |page| page.insert_html :bottom,
"comments", :partial => “comment”
end
<div id=”comments”> ... </div>
![Page 41: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/41.jpg)
DEMO
Rails Application – Iteration 6: AJAX
![Page 42: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/42.jpg)
Outline
Creating the Project Schema Migrations Validation The View Database Relationships Ajax Java Deployment
![Page 43: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/43.jpg)
Java
To call Java from Ruby:
Import classes (just as in Java)
Use the class: Note the Ruby syntax!
include Java
import java.util.ArrayList
dogs = ArrayList.newdogs.add "Spaniel"dogs.add "Hound"dogs.add "Retriever"
dogs.each do |dog| puts dogend
![Page 44: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/44.jpg)
DEMO
Rails Application – Iteration 7: Java
![Page 45: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/45.jpg)
Outline
Creating the Project Schema Migrations Validation The View Database Relationships Ajax Java Deployment
![Page 46: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/46.jpg)
46
Java Server Integration
Goldspike GlassFish V3
![Page 47: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/47.jpg)
47
Goldspike
Rails Plugin Packages Rails application as WAR WAR contains a servlet that translates data
from the servlet request to the Rails dispatcher
Works for any servlet container rake war:standalone:create
![Page 48: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/48.jpg)
48
GlassFish v3
Next version of GlassFish Ideal container for Web 2.0 applications Small
Kernel < 100k Fast
Starts up in < 1 second Modular
Java, Ruby, PHP, JavaScript, ... Will be Java EE 6 compatible
![Page 49: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/49.jpg)
49
Why JRuby on GlassFish ?
Java EE is tested deployment platform Integrate existing Java EE & RoR apps in
one container Hot Deployment
No need to restart container Database Connection Pooling One instance, one process OOTB Clustering and High Availability
![Page 50: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/50.jpg)
DEMO
Rails Application – Iteration 8: Deploying to GlassFish and
Tomcat
![Page 51: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/51.jpg)
Outline
Creating the Project Schema Migrations The View Validation Database Relationships Ajax Java Deployment
![Page 52: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/52.jpg)
Summary
The popular Ruby language and Ruby on Rails framework are now available on the Java platform
Ruby's dynamic nature make it a fun and ideal language for web development (Ruby on Rails)
Rails applications can be deployed to your favorite Java server container
![Page 53: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/53.jpg)
Java Powered Ruby
![Page 54: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/54.jpg)
Q&A
![Page 55: Rapid Development with Ruby, JRuby and Rails](https://reader035.vdocument.in/reader035/viewer/2022062319/554f81afb4c905d25b8b4ac3/html5/thumbnails/55.jpg)
Thank you for your attention