rails: geležinkelio romantika ir buitis

74
Rails geležinkelio romantika ir buitis Adomas Sliužinskas @ VilniusRB, 2014-03-01

Upload: adomas-sliuzinskas

Post on 17-May-2015

104 views

Category:

Technology


5 download

DESCRIPTION

Intro į Rails virtuvę

TRANSCRIPT

Page 1: Rails: geležinkelio romantika ir buitis

Railsgeležinkelio romantika ir buitis

Adomas Sliužinskas @ VilniusRB, 2014-03-01

Page 2: Rails: geležinkelio romantika ir buitis

Rails

● Ruby frameworkas● Skirtas web aplikacijoms● Su nuomone: Rails way

Page 3: Rails: geležinkelio romantika ir buitis

The Rails Way

Yra “geriausi” būdai.Jie geresni už alternatyvas.

Žinote patternų kitose kalbose?Turite įpročių?

Taikote juos Railsuose?

Page 4: Rails: geležinkelio romantika ir buitis
Page 5: Rails: geležinkelio romantika ir buitis

Rails: buzzwords!

● DRY: Don’t Repeat Yourself● CoC: Convention over Configuration

Page 6: Rails: geležinkelio romantika ir buitis

Rails: buzzwords!

● DRY: Don’t Repeat Yourself● CoC: Convention over Configuration

● MVC: Model View Controller● REST: REpresentational State Transfer● KISS: Keep It Simple Stupid

Page 7: Rails: geležinkelio romantika ir buitis

Rails: buzzwords!

● DRY: Don’t Repeat Yourself● CoC: Convention over Configuration

● MVC: Model View Controller● REST: REpresentational State Transfer● KISS: Keep It Simple Stupid● TDD, BDD…

Page 8: Rails: geležinkelio romantika ir buitis

Rails: buzzwords!

● DRY: Don’t Repeat Yourself● CoC: Convention over Configuration

● MVC: Model View Controller● REST: REpresentational State Transfer● KISS: Keep It Simple Stupid● TDD, BDD…● ALL the best practices!● OMGWTFBBQ!

Page 9: Rails: geležinkelio romantika ir buitis

Rails aplikacijų kūrimas

87%* Ruby on Rails tutorialų/knygų žada:● išmoksite greitai● išmoksite lengvai● aplikacijas kursite greitai● laimingas developeris● protingas developeris, nes best practices!

* man taip atrodo

Page 10: Rails: geležinkelio romantika ir buitis

Rails aplikacijų kūrimas

87%* Ruby on Rails tutorialų/knygų žada:● išmoksite greitai● išmoksite lengvai● aplikacijas kursite greitai● laimingas developeris● protingas developeris, nes best practices!

ORLY?

* grynai asmeninė nuomonė

Page 11: Rails: geležinkelio romantika ir buitis

Rails aplikacijų kūrimas

87%* Ruby on Rails tutorialų/knygų žada:● išmoksite greitai● išmoksite lengvai● aplikacijas kursite greitai● laimingas developeris● protingas developeris, nes best practices!

ORLY?

* grynai asmeninė nuomonė

Page 12: Rails: geležinkelio romantika ir buitis

Rails aplikacijų kūrimas

87%* Ruby on Rails tutorialų/knygų žada:● išmoksite greitai● išmoksite lengvai● aplikacijas kursite greitai● laimingas developeris● protingas developeris, nes best practices!

ORLY?

* grynai asmeninė nuomonė

Page 13: Rails: geležinkelio romantika ir buitis

Rails aplikacijų kūrimas

87%* Ruby on Rails tutorialų/knygų žada:● išmoksite greitai● išmoksite lengvai● aplikacijas kursite greitai● laimingas developeris● protingas developeris, nes best practices!

ORLY?

* grynai asmeninė nuomonė

Page 14: Rails: geležinkelio romantika ir buitis

Rails: out of the box

● Full stack web framework● jQuery● i18n● paruošta testams● daug magijos

Ir dar daug visko. Labai daug.

Page 15: Rails: geležinkelio romantika ir buitis

Rails: not included in the box

● Authentication● Backwards compatibility

Page 16: Rails: geležinkelio romantika ir buitis

Rails: not included in the box

● Authentication. Nes daug gemų.● Backwards compatibility. Nes progresas.

Page 17: Rails: geležinkelio romantika ir buitis

Rails aplikacijų kūrimui reikės:

1. HTML2. CSS3. Ruby pagrindai

Page 18: Rails: geležinkelio romantika ir buitis

Rails aplikacijų kūrimui reikės:

1. HTML2. CSS3. Ruby pagrindai

4. Rails5. ????6. PROFIT!!!

Page 19: Rails: geležinkelio romantika ir buitis

Rails aplikacijų kūrimui reikės:

1. HTML2. CSS3. Ruby pagrindai

4. Rails5. ????6. PROFIT!!!NOT!

Page 20: Rails: geležinkelio romantika ir buitis

Totalizatorius!!!

Rubistai, NEPASAKINĖKIT!

Kiek punktų bus pristatyme?

Page 21: Rails: geležinkelio romantika ir buitis

4. MVC

http://darynholmes.files.wordpress.com/2008/03/routinginrails.png

Page 22: Rails: geležinkelio romantika ir buitis

5. Routes

routes.rb

root :to => 'home#index'

match ‘admin’ => ‘admin/users#index’, :as => :admin

resources :comments, :except => [:new, :show]

Page 23: Rails: geležinkelio romantika ir buitis

6. REST

GET “/pages” # => index

POST “/pages” # => create

GET “/pages/1” # => show

PUT “/pages/1” # => update

DELETE “/pages/1” # => destroy

GET “/pages/new” # => new

GET “/pages/1/edit” # => edit

Page 24: Rails: geležinkelio romantika ir buitis

7. ORM: ActiveRecord (models)

● CRUD● Validations● Callbacks (:before, :after, :around)● Migrations (via Rake)● Query interface● Associations

Page 25: Rails: geležinkelio romantika ir buitis

8. ActionView (views & helpers)

● Layouts● Templates● Partials (subtemplates)

● Template caching● Helpers

○ FormHelper■ Remote forms: ajax forms out of the box!!!1

○ Lyginant su ^ visa kita nesvarbu

Page 26: Rails: geležinkelio romantika ir buitis

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija

Page 27: Rails: geležinkelio romantika ir buitis

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija

Page 28: Rails: geležinkelio romantika ir buitis

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija● Suspaudimas

Page 29: Rails: geležinkelio romantika ir buitis

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija● Suspaudimas● Preprocesinimas

Page 30: Rails: geležinkelio romantika ir buitis

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija● Suspaudimas● Preprocesinimas● Referendumas

Page 31: Rails: geležinkelio romantika ir buitis

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija● Suspaudimas● Preprocesinimas?● Referendumas

Page 32: Rails: geležinkelio romantika ir buitis

9. Asset pipeline

● CSS, SASS, SCSS, LESS● JS, CoffeeScript● Paveikslėliai

● Konkatanacija● Minifikacija● Suspaudimas● Preprocesinimas?

Page 33: Rails: geležinkelio romantika ir buitis

10. CSS framework

Pagal nutylėjimą: SASSRealiai: SCSS

$color_link: #0033cc;

a {

text-decoration: none;

&:link, &:visited {

color: $color_link;

}

}

Page 34: Rails: geležinkelio romantika ir buitis

11. DB migracijosclass CreatePermissions < ActiveRecord::Migration

def self.up

create_table :permissions do |t|

t.integer :user_id

t.string :type

end

add_index :user_id

end

def self.down

drop_table :permissions

end

end

Page 35: Rails: geležinkelio romantika ir buitis

12. Rails komandinė eilutė$ rails new

$ rails server

$ rails generate

$ rails console

Page 36: Rails: geležinkelio romantika ir buitis

12. Rails generatoriai$ rails generate controller CreditCard open debit credit close

$ rails g controller CreditCard open debit credit close

$ rails g model user email:index country_id:integer:index

$ rails g scaffold user email:string:index country_id:integer:index

Page 37: Rails: geležinkelio romantika ir buitis

13. Rake$ rake db:create

...

$ rails generate migration

...

$ rake db:migrate

$ rake assets:precompile

$ rake routes

$ rake --tasks

Page 38: Rails: geležinkelio romantika ir buitis

14. Template engine: ERB

<% items.each do |item| %>

<li><%= item.title %></li>

<% end %>

Page 39: Rails: geležinkelio romantika ir buitis

14. Template engine: ERB

<% items.each do |item| %>

<li><%= item.title %></li>

<% end %>

<? foreach($items as $item) { ?>

<li><? echo $item[‘title’]; ?></li>

<? } ?>

vs. PHP:

Page 40: Rails: geležinkelio romantika ir buitis

14. Template engine: ERB

<% items.each do |item| %>

<li><%= item.title %></li>

<% end %>

$(document).ready(function() {

App.load(<%= data.to_json %>);

});

menu.html.erb vs. menu.js.erb

Page 41: Rails: geležinkelio romantika ir buitis

14a. ERB == PHP?

<% items.each do |item| %>

<li><%= item.title %></li>

<% end %>

<? foreach($items as $item) { ?>

<li><? echo $item[‘title’]; ?></li>

<? } ?>

vs. PHP:

Page 42: Rails: geležinkelio romantika ir buitis

14b. Slim

- if ad.active?

#ad.jumbotron.text-center

h1 = ad.title

p.head

a href=”/faq”

| FAQ

#footer

| BBQ

Page 43: Rails: geležinkelio romantika ir buitis

14b. Slim vs. ERB- if ad.active?

#ad.fu.bar

h1 = ad.title

p.head

a href=”/faq”

| FAQ

#footer

| BBQ

<% if ad.active? %>

<div id=”ad” class=”fu bar”>

<h1><%= ad.title %></h1>

<p class=”head”>

<a href=”/faq”>FAQ</a> </p>

</div>

<% end %>

<div id=”footer”>BBQ</div>

Page 44: Rails: geležinkelio romantika ir buitis

15. Gem’ai

RubyGems: paketų managerisGem: paketas/biblioteka

Rails: Gemfile

gem 'mysql2'

$ bundle install

Page 45: Rails: geležinkelio romantika ir buitis

16. RVM arba rbenv

Ruby versijų manageris

$ rvm install jruby-1.7.9

$ rvm --default use 2.1.1

Page 46: Rails: geležinkelio romantika ir buitis

17. Unix OS

Windowsai nelabai:● RVM. Alternatyva - Pik● Command line● Git● SSH● bendruomenės supportas...

Page 47: Rails: geležinkelio romantika ir buitis
Page 48: Rails: geležinkelio romantika ir buitis

18. YAML

development: &development

adapter: mysql2

database: doge_crm

username: such_root

password: much_security_wow!1

production:

<<: *development

adapter: pg

routes.rb

Page 49: Rails: geležinkelio romantika ir buitis

19. Environments

● development● test● production

● duomenų bazės● performance● aplikacijos logikoje

- if Rails.env.production?

javascript: / Google Analytics code

Page 50: Rails: geležinkelio romantika ir buitis

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

Page 51: Rails: geležinkelio romantika ir buitis

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

Pradžiai: Heroku

Page 52: Rails: geležinkelio romantika ir buitis

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

Pradžiai: Heroku

Galima su Rake

Page 53: Rails: geležinkelio romantika ir buitis

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

Pradžiai: Heroku

Galima su Rake

Geriausia: Capistrano

Page 54: Rails: geležinkelio romantika ir buitis

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

Pradžiai: Heroku

Galima su Rake

Geriausia: Capistrano…

21. Capistrano

Page 55: Rails: geležinkelio romantika ir buitis

20. “Jūsų VPS”: deployinimas

FTP?

Page 56: Rails: geležinkelio romantika ir buitis

20. “Jūsų VPS”: deployinimas

FTP?

Įmanoma, bet…

22. git

Page 57: Rails: geležinkelio romantika ir buitis

23. Duomenų bazių skirtumai

MySQL vs. PostgreSQL vs. SQLite

SQLite nepalaiko...a) ADD COLUMNb) ALTER COLUMNc) DROP COLUMN

Page 58: Rails: geležinkelio romantika ir buitis

23. Duomenų bazių skirtumai

MySQL vs. PostgreSQL vs. SQLite

SQLite nepalaiko...a) ADD COLUMNb) ALTER COLUMNc) DROP COLUMN

Page 59: Rails: geležinkelio romantika ir buitis

Testai: buzzwords

TDD: Test Driven Development?

BDD: Behaviour Driven Development?

CI: Continuous Integration?

Page 60: Rails: geležinkelio romantika ir buitis

Testai: tipai

Unit tests?

Functional tests?

Integration tests?

Page 61: Rails: geležinkelio romantika ir buitis

Testai: tipai

Unit tests?

Functional tests?

Integration tests?

How about no tests? (trollface)

Page 62: Rails: geležinkelio romantika ir buitis

Testai: tipai

Unit tests?

Functional tests?

Integration tests?

How about no tests? (trollface)

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

Page 63: Rails: geležinkelio romantika ir buitis

24. Test::Unit vs. RSpec

Test::Unit● apie kodą● assert that X predicate Y

RSpec● apie objektus● X should Y

Išsamiau:http://programmers.stackexchange.com/questions/27328/rspec-vs-testunit-in-rails#answer-27406

Page 64: Rails: geležinkelio romantika ir buitis

25. Fixtures

john:

first_name: John

last_name: Doe

describe "#full_name" do

it "has first and last name" do

user = users(:john)

user.full_name.should eql("John Doe")

end

end

Page 65: Rails: geležinkelio romantika ir buitis

25a. Fixtures… yra blogis

● iš kur ir kaip atsirado user?● ar tikrai kažkas kažkur kode nustatė

reikšmes?

describe "#full_name" do

it "has first and last name" do

user = users(:john)

user.full_name.should eql("John Doe")

end

end

Page 66: Rails: geležinkelio romantika ir buitis

25b. Factories vietoj Fixtures

factory :john do

first_name "John"

last_name "Doe"

describe "#full_name" do

it "has first and last name" do

@user = build(:user,

first_name: “Bruce”, last_name: “Willis”)

@user.full_name.should eql(“Bruce Willis”)

end

end

Page 67: Rails: geležinkelio romantika ir buitis

26. Mocks/stubs

Nes unit testing against database is wrong*

Stub: nustato objekto metodo grąžinamą reikšmę

Mock: stub su metodo iškvietimo lūkesčiais

* because reasons

Page 68: Rails: geležinkelio romantika ir buitis

27. Cucumber

Integracinis/acceptance testavimas

Terminai:Gherkin: Cucumber DSL, business readableCapybara: gem’as, palengvinantis interakcijas su naršykle(-ėmis)

Page 69: Rails: geležinkelio romantika ir buitis

28. Background tasks

● Emailai● Importas/eksportas● Ilgai trunkančios užduotys● Schedulinamos užduotys● crontab aplikacijos viduje

Gem’ai:● Sidekiq● DelayedJob● Resque

Page 70: Rails: geležinkelio romantika ir buitis

29. Debugging

Interaktyvus ruby debugeris: pryJavascript analogas: debugger;

1. Gemfile: gem ‘pry’2. $ bundle install3. kode: binding.pry4. užklausa naršyklėje/konsolėje5. magija: railsų serverio lange

Page 71: Rails: geležinkelio romantika ir buitis

42. Failų struktūra

Interaktyvi dalis, kiek galima į skaidres žiūrėt :)

Page 72: Rails: geležinkelio romantika ir buitis

Klausimai!

Čia yra vieta jūsų (Ruby on Rails) problemoms.

Page 74: Rails: geležinkelio romantika ir buitis

42 Rails developerio įrankiai1. HTML2. CSS3. Ruby pagrindai4. MVC5. Routes6. REST7. ActiveRecord8. ActionView9. Asset pipeline10. CSS framework

11. DB migracijos12. Rails command line13. Rake14. ERB/Slim15. Gems16. RVM/rbenv17. Unix OS18. YAML19. Environments20. Serverio priežiūra

21. Capistrano22. git23. DB niuansai24. Test::Unit/RSpec25. Factories26. Mocks/stubs27. Cucumber28. Background tasks29. Debugging42. Failų struktūra