From Event to Action: Accelerate Your Decision Making with Real-Time Automation
RubyEnRails2007 - Dr Nic Williams - Keynote
1. Dr Nic
drnicwilliams.com
Remember:
drnicacademy.com
* setup for demo of
magic_model_generator (pp 36)
* set font size of database.yml to large
What’s cool
about Rails?
24. Websites are text
And it doesn’t
matter how
the text gets to
the browser
25. <html>
<head>
<title>Hello world</title>
</head>
<body> Here’s some
<p>Hello World</p> might send
text that you
</body>
</html>
26. Rails
When you come to I just want to talk
Rails you quickly about these 3...
learn there are
many things you
need to get good at
quickly...
27. Javascript HTML CSS
Rails
Gems Ruby
When you come to I just want to talk
Rails you quickly about these 3...
learn there are
many things you
need to get good at
quickly...
Rake Databases Unix
28. Javascript HTML CSS
Rails
Gems Ruby
When you come to I just want to talk
Rails you quickly about these 3...
learn there are
many things you
need to get good at
quickly...
Rake Databases Unix
33. RailsConf 2007
“Because its just
text generation” Ok, now let’s
look at the
latest ways to
generate text
on the web...
34. “Does it scale?”
Everyone worries about
requests per second; but I
think its more important
to worry about the cost
per new feature. Rails is
structured to make it
easy to design and
implement new stuff.
35. “Does it scale?”
“Yes. Just add more controllers.”
Everyone worries about
requests per second; but I
think its more important
to worry about the cost
per new feature. Rails is
structured to make it
easy to design and
implement new stuff.
36. RESTful controllers
class PeopleController < ApplicationController
# GET all or search
def index...
def show...
def new...
def edit...
def create...
def update...
def destroy...
end
37. RESTful controllers
class PeopleController < ApplicationController
# GET all or search
def index...
def show...
def new...
CRUD operations
def edit...
def create...
def update...
def destroy...
end
38. RESTful routes
/people/show/1 => /people/1
/people/some_action/45 => /people/45/some_action
Its now cool to use
restful routing. The
benefit is you can
remove the tail of a
url, and the url is still
meaningful.
39. One of the main
agreements about
convention in Rails
RESTful result types
is RESTfulness.
Same actions, but
new paradigm.
class PeopleController < ApplicationController
def create
@person = Person.create(params[:person])
respond_to do |format|
format.html { redirect_to person_url(@person) }
format.xml { render :status => :created,
:location => person_url(@person), ... }
end
From developer side,
end you can return more
end data formats with
the same actions.
40. One of the main
agreements about
convention in Rails
RESTful result types
is RESTfulness.
Same actions, but
new paradigm.
class PeopleController < ApplicationController
def create
@person = Person.create(params[:person])
respond_to do |format|
format.html { redirect_to person_url(@person) }
format.xml { render :status => :created,
:location => person_url(@person), ... }
end
From developer side,
end you can return more
end data formats with
the same actions.
41. Any format you want
respond_to do |format|
format.html { render ... }
format.xml { render ... }
format.csv { render ... }
format.js { render ... }
formal.foobar { render ... }
end
44. This is cool because...
class Person < ActiveResource::Base
self.site = quot;http://contacts.drnicwilliams.com:3000/quot;
end
Person.find_by_name quot;Dr Nic Williamsquot; Who cares
what REST is?
This syntax is
awesome.
45. Learn more?
Read the README and CHANGELOG for
ActiveResource
http://dev.rubyonrails.org/browser/trunk/activeresource/README
46. Jester:
REST for Javascript
Base.model(quot;Personquot;, {
plural: quot;peoplequot;,
prefix: quot;http://drnicwilliams.com:3000quot;})
Person.find(quot;allquot;, { premium: true }, This #find call is
asynchronous
{ onSuccess: callback }) and invokes
callback on
complete.
by Eric Mill
47. “Logical” servers for the connector
1) Jumpstart/PXE Boot
2) Monitoring
3) Auditing
4) Logging
5) Provisioning and configuration management
6) DHCP/LDAP for server identification/authentication and control (at dual for failover)
7) DNS: DNS cache and resolver, and a (private) DNS system (4x + 2; 2+ sites)
8) DNS MySQL (4x + 2, dual masters with slaves per DNS node, innodb tables)
9) SPAM filtering servers (files to NFS store and tracking to postgresql)
10) SPAM database setup (postgresql)
11) SPAM NFS store
12) SMTP proxies and gateways out
13) SMTP proxies and gateways in (delivery to clusters to Maildir over NFS)
14) Mail stores
15) IMAP proxy servers
16) IMAP servers
17) User LDAP servers
18) User long running processes
19) User postgresql DB servers
20) User web servers
21) User application servers
22) User File Storage (NFS)
23) Joyent Organization Provisioning/Customer panel servers (web, app, database)
24) iSCSI storage systems
25) Chat servers
Jason Hoffman, Railsconf 2007
26) Load balancer/proxies/static caches
...
51. Hosting
Don’t deploy Rails to Amazon’s EC2
Run Ruby scripts on Amazon’s EC2
EC2 have virtual Use EC2 for
storage - if you
other
lose your instance,
processes on
you lose data.
demand.
Backup hourly.
53. deprec - easy peasy
cap install_rails_stack
cap setup
cap deploy_with_migrations
cap restart_apache
Slap ubuntu
on a machine
and go.
54. install_rails_stack
task :install_rails_stack do
setup_user_perms
enable_universe
disable_cdrom_install
install_packages_for_rails
install_rubygems
The process of
install_gems deploying rails
install_apache generically is
being solved
end
57. For demo:
$ pgstart
magic_model_generator
$ rails magic_show -d postgresql
$ database.yml:
database: activerecord_unittest
$ Kill textmate and reload it fresh from
magic_show folder
$ Have /db and /app/models folders open and empty
$ Pump up font size
$ iTerm open to magic_show folder
Now, demo is ready
$ sudo gem install magic_model_generator
# Show post.rb as example
$ rails magic_show
$ cd magic_show
# point database.yml to legacy database
$ rake db:migrate
# check /db/schema.rb contains all tables
$ ruby script/generate magic_model
# check /app/models contains model files
66. hoe - Ryan Davis
seattle.rb - ZenTest/autotest
67. hoe - Ryan Davis
seattle.rb - ZenTest/autotest
# Rakefile
hoe = Hoe.new(GEM_NAME, VERS) do |p|
p.author = AUTHOR
p.description = DESCRIPTION
p.email = EMAIL
p.summary = SUMMARY
p.url = HOMEPATH
end
Its easier to write a Gem than not to!