rails: geležinkelio romantika ir buitis

Post on 17-May-2015

104 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

Intro į Rails virtuvę

TRANSCRIPT

Railsgeležinkelio romantika ir buitis

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

Rails

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

The Rails Way

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

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

Taikote juos Railsuose?

Rails: buzzwords!

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

Rails: buzzwords!

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

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

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…

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!

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

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ė

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ė

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ė

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ė

Rails: out of the box

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

Ir dar daug visko. Labai daug.

Rails: not included in the box

● Authentication● Backwards compatibility

Rails: not included in the box

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

Rails aplikacijų kūrimui reikės:

1. HTML2. CSS3. Ruby pagrindai

Rails aplikacijų kūrimui reikės:

1. HTML2. CSS3. Ruby pagrindai

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

Rails aplikacijų kūrimui reikės:

1. HTML2. CSS3. Ruby pagrindai

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

Totalizatorius!!!

Rubistai, NEPASAKINĖKIT!

Kiek punktų bus pristatyme?

4. MVC

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

5. Routes

routes.rb

root :to => 'home#index'

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

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

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

7. ORM: ActiveRecord (models)

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

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

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija● Suspaudimas

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija● Suspaudimas● Preprocesinimas

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija● Suspaudimas● Preprocesinimas● Referendumas

9. Asset pipeline

● CSS● JS● Paveikslėliai

● Konkatanacija● Minifikacija● Suspaudimas● Preprocesinimas?● Referendumas

9. Asset pipeline

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

● Konkatanacija● Minifikacija● Suspaudimas● Preprocesinimas?

10. CSS framework

Pagal nutylėjimą: SASSRealiai: SCSS

$color_link: #0033cc;

a {

text-decoration: none;

&:link, &:visited {

color: $color_link;

}

}

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

12. Rails komandinė eilutė$ rails new

$ rails server

$ rails generate

$ rails console

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

13. Rake$ rake db:create

...

$ rails generate migration

...

$ rake db:migrate

$ rake assets:precompile

$ rake routes

$ rake --tasks

14. Template engine: ERB

<% items.each do |item| %>

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

<% end %>

14. Template engine: ERB

<% items.each do |item| %>

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

<% end %>

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

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

<? } ?>

vs. PHP:

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

14a. ERB == PHP?

<% items.each do |item| %>

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

<% end %>

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

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

<? } ?>

vs. PHP:

14b. Slim

- if ad.active?

#ad.jumbotron.text-center

h1 = ad.title

p.head

a href=”/faq”

| FAQ

#footer

| BBQ

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>

15. Gem’ai

RubyGems: paketų managerisGem: paketas/biblioteka

Rails: Gemfile

gem 'mysql2'

$ bundle install

16. RVM arba rbenv

Ruby versijų manageris

$ rvm install jruby-1.7.9

$ rvm --default use 2.1.1

17. Unix OS

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

18. YAML

development: &development

adapter: mysql2

database: doge_crm

username: such_root

password: much_security_wow!1

production:

<<: *development

adapter: pg

routes.rb

19. Environments

● development● test● production

● duomenų bazės● performance● aplikacijos logikoje

- if Rails.env.production?

javascript: / Google Analytics code

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

Pradžiai: Heroku

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

Pradžiai: Heroku

Galima su Rake

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

Pradžiai: Heroku

Galima su Rake

Geriausia: Capistrano

20. “Jūsų VPS”: deployinimas

Shared hosting? NOPE!

Pradžiai: Heroku

Galima su Rake

Geriausia: Capistrano…

21. Capistrano

20. “Jūsų VPS”: deployinimas

FTP?

20. “Jūsų VPS”: deployinimas

FTP?

Įmanoma, bet…

22. git

23. Duomenų bazių skirtumai

MySQL vs. PostgreSQL vs. SQLite

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

23. Duomenų bazių skirtumai

MySQL vs. PostgreSQL vs. SQLite

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

Testai: buzzwords

TDD: Test Driven Development?

BDD: Behaviour Driven Development?

CI: Continuous Integration?

Testai: tipai

Unit tests?

Functional tests?

Integration tests?

Testai: tipai

Unit tests?

Functional tests?

Integration tests?

How about no tests? (trollface)

Testai: tipai

Unit tests?

Functional tests?

Integration tests?

How about no tests? (trollface)

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

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

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

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

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

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

27. Cucumber

Integracinis/acceptance testavimas

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

28. Background tasks

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

Gem’ai:● Sidekiq● DelayedJob● Resque

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

42. Failų struktūra

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

Klausimai!

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

Ačiū!

@adomas_sadomas.sliuzinskas@gmail.com

* neturiu katinuko, tai bulvė** romantika included

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

top related