rails: geležinkelio romantika ir buitis
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ū!
* 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