Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby on Rails 4.2 İle Gelen Kullanışlı Yenilikler

Ruby on Rails 4.2 İle Gelen Kullanışlı Yenilikler

Tayfun (Öziş) Erikan

December 05, 2014
Tweet

More Decks by Tayfun (Öziş) Erikan

Other Decks in Programming

Transcript

  1. Ruby on Rails 4.2 İle Gelen Kullanışlı Yenilikler Tayfun Öziş

    ERİKAN, Genel Koordinatör Lab2023 Bilişim Teknolojileri AŞ [email protected] - @toziserikan 4.2.x 4.1.x
  2. Ben kimim? • “Lab2023 - Bilişim Teknolojileri AŞ” kurucu ortağı

    & Genel Koordinatör • Web geliştirici • Ruby / Rails , ExtJS, Sencha Touch, Sass, Compass • Front-end & Graphic, UI, UX • Native & Web Tabanlı Mobil Geliştirici • [email protected] - @toziserikan • www.tayfunoziserikan.com
  3. • Active Job • Action Mailer • Global ID •

    Adequate Record • Web Console • Foreign Key Support • Diğer Yenilikler • Kurun ve Deneyin
  4. Active Job • Rails’e eklenen yeni bir katmandır. • Resque,

    Delayed Job, Sidekiq, v.b. arkaplan iş araçlarını kullanmanız için ortak bir arayüz sunar. • Active Job API kullanarak arkaplan işlemlerinizi kapsüllersiniz. • Ön tanımlı olarak gelmektedir. Sadece adaptörünüzü seçmeniz yeterlidir.
  5. Active Job - Konfigürasyon Gemfile’a ilgili arkaplan kütüphanesini eklemeniz yeterlidir.

    gem ‘sidekiq’ Rails konfigürasyon dosyanıza aşağıdaki düzenlemeyi yapmanız yeterlidir. config.active_job.queue_adapter = :sidekiq
  6. Active Job - İş Oluşturma Rails generator kullanarak konsoldan aşağıdaki

    şekilde oluşturabilirsiniz. $ bin/rails generate job process_video invoke test_unit create test/jobs/process_video_job_test.rb create app/jobs/process_video_job.rb
  7. Active Job - Oluşan Kod Yeni oluşturulan arkaplan iş parçacığının

    kod çıktısı aşağıdaki gibidir. class ProcessVideoJob < ActiveJob::Base queue_as :default def perform(*args) # do something later end end
  8. Active Job - İşi Kuyruğa Almak Doğrudan çalıştırmak: ProcessVideoJob.perform_later video

    Belirli bir zaman sonra çalıştırmak: ProcessVideoJob.set(wait: 1.week) .perform_later video ProcessVideoJob.set(wait_until:Date.tomorrow.noon) .perform_later video
  9. Active Job - Hata Yakalama Arkaplanda oluşan hataları yakalayıp yönetebilirsiniz:

    class ProcessVideoJob < ActiveJob::Base ... rescue_from(Exception) do |e| # do something with exception end end
  10. Active Job - Callbacks Active Job işin yaşam döngüsü sırasında

    belirli aşamalara erişmenize ve işlemler yapmanıza izin verir. before_enqueue do |job| # do something with the job instance end around_perform do |job, block| # do something before perform block.call # do something after perform end • before_enqueue • around_enqueue • after_enqueue • before_perform • around_perform • after_perform
  11. Action Mailer • Action Mailer Active Job’u kullanarak mail gönderebilir.

    UserMailer.welcome(@user).deliver_now • #deliver_now ile mesaji hemen iletebilirsiniz.
  12. Action Mailer • Eğer #deliver_later kullanırsanız, mail sonraki bir zaman

    diliminde gönderilmek üzere kuyruğa atılacaktır. UserMailer.welcome(@user).deliver_later • :wait, :wait_until ve :queue opsiyonlarını tıpkı Active Job’daki gibi kullanabilirsiniz.
  13. Global ID • Model objelerine erişimi kolaylaştırmak için tekil bir

    ID oluşturulur ve bir URI üzerinden erişilebilir hale getirilir. irb> video.to_global_id.to_s => “gid://app/Video/1 • Active Job objelere ulaşmak için Global ID’yi kullanarak objeleri serialize veya deserialize yapar. • Böylelikle örneğin Active Record katmanındaki modellere, arkaplanda çalışan iş parcacıkları arasından rahatlıkla erişebilirsiniz.
  14. Global ID Biraz daha detaylı bir örnek: >> person_gid =

    Person.find(1).to_global_id => #<GlobalID ... >> person_gid.uri => #<URI ... >> person_gid.to_s => “gid://app/Person/1" <— Dikkat >> GlobalID::Locator.locate person_gid => #<Person:0x007fae94bf6298 @id="1">
  15. Adequate Record • Active Record katmanında yapılan iyileştirmeler ile find

    ve find_by methodları 2x daha hızlı çalışmaya başladı. • Oluşturulan SQL sorgu cümleciklerinin statik kısımlarının ön belleğe alınması ve sonraki çağrılarda tekrar kullanılmasını sağlar. • Aaron Patterson tarafından tasarlanmıştır. Detaylar için bloğuna göz atınız.
  16. Adequate Record Post.find(1) # İlk çağrıda statik kısım önbelleğe alınır

    # SELECT * FROM posts WHERE id = ? Post.find(2) # Dana önce önbelleğe alınan SQL cümlesi doğrudan # doğrudan çalıştırılır Post.find_by_title('first post') Post.find_by_title('second post') post.comments post.comments(true)
  17. Web Console • Rails uygulamanızda Debug yapmanızı kolaylaştıran bir araçtır.

    • Herhangi bir hata meydana gelip, bir exception fırladığında uygulama önyüzünde otomatik olarak devreye girer. • Eğer isterseniz doğrudan herhangi bir view katmanından da viewer helper’ını kullanarak doğrudan çağırabilirsiniz. • Alternatif olarak better_errors gem’i inceleyebilirsiniz. <%= console %>
  18. Foreign Key Support • Nihayet eklediler :) • Migration katmanı,

    DSL’ine eklenen yeni komutlar sayesinde tablolarınıza yabancı anahtarları (foreign key) eklemenize veya çıkarmanıza izin verir hale geldi. • Şimdilik sadece mysql, mysql2 ve postgresql adaptörleri yabancıl anahtarları desteklemektedir.
  19. Foreign Key Support # ‘articles.author_id’ yabancı anahtarını # ‘authors.id’ referansı

    ile eklemek add_foreign_key :articles, :authors # ‘articles.author_id’ yabancı anahtarını # ‘users.lng_id’ referansı ile eklemek add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id" # ‘accounts.branch_id’ yabancı anahtarını kaldırmak remove_foreign_key :accounts, :branches # ‘accounts.owner_id’ yabancı anahtarını kaldırmak remove_foreign_key :accounts, column: :owner_id
  20. Diger Yenilikler • Önceki sürümde kaldırılan ve önerilmeyen işlevler tamamen

    çıkarılmıştır. • respond_with ve respond_to işlevleri 'responders', '~> 2.0' gem’ine taşındı. Bu işlevler için Gemfile’a bu gem’in eklenmesi gerekiyor. • Rack katmanından gelen bir değişiklik nedeniyle default olarak http://localhost artık 0.0.0.0 adresini dinlemeye başlamıştır.
  21. Diger Yenilikler • Production ortamındakı hata seviyesi varsayılan olarak development

    ve test ortamındaki gibi :debug seviyesine getirilmiştir. • HTML sanitizer yeni versiyon ile güncellenmiş ve daha esnek ve güçlü hale getirilmiştir.
  22. Kurun ve Deneyin # Terminalden kurmak için $ gem install

    rails --pre # Gemfile gem ‘rails’, ‘~> 4.2.0.rc1’