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

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

9c55af85fdee9df09c5fa7dd3d1945b0?s=128

Tayfun Öziş ERİKAN

December 05, 2014
Tweet

Transcript

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

    ERİKAN, Genel Koordinatör Lab2023 Bilişim Teknolojileri AŞ tayfun.ozis.erikan@lab2023.com - @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 • tayfun.ozis.erikan@lab2023.com - @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. Web Console

  19. 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.
  20. 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
  21. 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.
  22. 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.
  23. Kurun ve Deneyin # Terminalden kurmak için $ gem install

    rails --pre # Gemfile gem ‘rails’, ‘~> 4.2.0.rc1’
  24. Teşekkürler Soru-cevap Tayfun Öziş ERİKAN, Genel Koordinatör Lab2023 Bilişim Teknolojileri

    AŞ tayfun.ozis.erikan@lab2023.com - @toziserikan