Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

• Active Job • Action Mailer • Global ID • Adequate Record • Web Console • Foreign Key Support • Diğer Yenilikler • Kurun ve Deneyin

Slide 4

Slide 4 text

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.

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Action Mailer • Action Mailer Active Job’u kullanarak mail gönderebilir. UserMailer.welcome(@user).deliver_now • #deliver_now ile mesaji hemen iletebilirsiniz.

Slide 12

Slide 12 text

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.

Slide 13

Slide 13 text

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.

Slide 14

Slide 14 text

Global ID Biraz daha detaylı bir örnek: >> person_gid = Person.find(1).to_global_id => #> person_gid.uri => #> person_gid.to_s => “gid://app/Person/1" <— Dikkat >> GlobalID::Locator.locate person_gid => #

Slide 15

Slide 15 text

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.

Slide 16

Slide 16 text

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)

Slide 17

Slide 17 text

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 %>

Slide 18

Slide 18 text

Web Console

Slide 19

Slide 19 text

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.

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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.

Slide 22

Slide 22 text

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.

Slide 23

Slide 23 text

Kurun ve Deneyin # Terminalden kurmak için $ gem install rails --pre # Gemfile gem ‘rails’, ‘~> 4.2.0.rc1’

Slide 24

Slide 24 text

Teşekkürler Soru-cevap Tayfun Öziş ERİKAN, Genel Koordinatör Lab2023 Bilişim Teknolojileri AŞ [email protected] - @toziserikan