14
John Ashmead Ruby-on-Rails PostgreSQL &

Ruby on Rails & PostgreSQL - v2

Embed Size (px)

DESCRIPTION

Ruby-on-Rai

Citation preview

Page 1: Ruby on Rails & PostgreSQL - v2

John Ashmead

Ruby-on-Rails

PostgreSQL

&

Page 2: Ruby on Rails & PostgreSQL - v2

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

Page 3: Ruby on Rails & PostgreSQL - v2

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

Page 4: Ruby on Rails & PostgreSQL - v2

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 !…

Page 5: Ruby on Rails & PostgreSQL - v2

ActiveRecord• Database adaptor

• General purpose

• Convention over configuration

• Reasonable defaults

• Standalone product

maps

id

name

description

created_at

updated_at

Page 6: Ruby on Rails & PostgreSQL - v2

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

Page 7: Ruby on Rails & PostgreSQL - v2

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

Page 8: Ruby on Rails & PostgreSQL - v2

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

Page 9: Ruby on Rails & PostgreSQL - v2

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

Page 10: Ruby on Rails & PostgreSQL - v2

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

Page 11: Ruby on Rails & PostgreSQL - v2

Red• Agile & Stories

• Examples & TDD (Test-driven development) over APIs

• MVC: Model/View/Controller

• Upgrades in RoR much trickier than in PostgreSQL

RefactorGreen

Page 12: Ruby on Rails & PostgreSQL - v2

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

Page 13: Ruby on Rails & PostgreSQL - v2

• 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

Page 14: Ruby on Rails & PostgreSQL - v2

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/

• …