Upload
john-ashmead
View
1.648
Download
1
Embed Size (px)
DESCRIPTION
Ruby-on-Rai
Citation preview
John Ashmead
Ruby-on-Rails
PostgreSQL
&
Ruby-on-Rails
• Based on Ruby
• A Framework, like Django
• Widely popular
• Ruby + ActiveRecord + Lots of Web Stuff + Lots of other Stuff
• Michael Hardt: http://ruby.railstutorial.org
Ruby Version Manager
• RVM lets you run multiple versions of ruby
• Copies everything into some trees, then switches pointers around
• Manages gems & gemsets
• Bundle install, bundle update
Gemfilesource 'https://rubygems.org' !ruby '2.0.0' !# Make sure we are using latest ‘rails’ gem 'rails', '4.0.0' !# Use Postgres as the database for Active Record gem 'pg' !# Use SCSS for stylesheets gem 'sass-rails', '~> 4.0.0' !# switch to bootstrap, rspec, factory_girl, selenium, capybara !…
ActiveRecord• Database adaptor
• General purpose
• Convention over configuration
• Reasonable defaults
• Standalone product
maps
id
name
description
created_at
updated_at
Finally, PostgreSQL• ‘pg’ gem
• Provides ActiveRecord with interface to Postgres
• AR has an “execute” function that lets you run raw sql
• ‘postgres-pr’ gem gives access to PostgreSQL specific features, if needed
Foreign Keys
• ActiveRecord has a lot of “associations”
• Has_many, belongs_to, has_and_belongs_to_many
• Doesn’t clean up the existing database
• Doesn’t automatically generate the relevant keys
• Doesn’t fix the metadata
create_table "maps", force: true do |t| t.integer "user_id" t.string "map_type", t.string "name" t.text "description" t.decimal "map_width" t.decimal "map_height" t.datetime "created_at" t.datetime "updated_at" endCREATE TABLE maps ( id integer NOT NULL, user_id integer, map_type character varying(255), name character varying(255), description text, map_width numeric, map_height numeric, created_at timestamp without time zone, updated_at timestamp without time zone );
Weirder than it
looks
class CreateMaps < ActiveRecord::Migration def change create_table :maps do |t| t.integer :user_id t.string :map_type, t.string :name, t.text :description t.decimal :map_width t.decimal :map_height ! t.timestamps end end end
rails generate scaffold Map user_id:integer map_type:string name:string description:text map_width:decimal map_height:decimal
rake db:migrate && rails db:migrate RAILS_ENV=test
Migrations
Heroku stack• Ruby-on-Rails front end
• PostgreSQL preferred
• Well documented
• Free up to a reasonable point
• Integrated with github
• Lots of tools
• Mostly works
• https://www.heroku.com
Red• Agile & Stories
• Examples & TDD (Test-driven development) over APIs
• MVC: Model/View/Controller
• Upgrades in RoR much trickier than in PostgreSQL
RefactorGreen
Domain Specific Languages• Ruby makes it easy to
write DSLs
• PostgreSQL makes it easy to hook existing languages in: i.e. Javascript as a server language.
• Gems versus packages. About 30K gems! Of widely varying quality.
• YMMV
describe "home page" do ! let!(:person) \ { FactoryGirl.create(:person) } ! before { sign_in person visit home_people_path(person) } ! it { should have_content(person.name) } it { should have_title(person.name) } ! end
• Ruby-on-rails has a lot of levels
• Achieving rapport with rails takes time
• Help: railscasts, stackoverflow, …
• Grow little neurons, grow (damn you!)
Long learning curves
There’s a page for that• http://localhost:8081/phpPgAdmin/
• http://guides.rubyonrails.org
• http://api.rubyonrails.org
• https://codeclimate.com
• http://localhost:3000
• https://github.com
• http://ruby.railstutorial.org/book/ruby-on-rails-tutorial?version=4.0
• http://ruby-doc.com/docs/ProgrammingRuby/
• …