Sitemap
Gökçe Soylu

Gökçe Soylu

Computer engineer |Backend developer https://www.gokcedev.com

Rails Nedir?

6 min readOct 8, 2024

--

Merhabalar :)

Bu yazıda Rails framework’ü nedir? Ne işe yarar? Çalışma prensibi, mantığı ve yöneticileri nelerdir? gibi konulardan bahsedip Rails’e giriş yapıcaz.

Öncelikle Rails ruby programlama dili üzerinde geliştirilmiş bir framework’tür. Zaten bu yüzden ruby on rails diyoruz.

Ruby yazımı oldukça kolay, diğer dillere nispeten daha az kod satırıyla işlemlerinizi yapabileceğiniz bir dildir. Rails ise bu dilin üzerinde web uygulamaları geliştirmemizi sağlayacak şekilde tasarlanmıştır. Rails kullandığınız zaman geliştireceğiniz proje için gerekli pek çok işlemi içerisinde bulunan kütüphaneler aracılığıyla rahatlıkla yapabilirsiniz.

karmaşık web uygulamaları geliştirmek için oldukça iyi bir seçenektir.

Ayrıca rails’in güzel yanlarından bir taneside veri tabanı üzerinde yapacağınız işlemlerde sağladığı kolaylıklardır. oluşturduğunuz model ile veri tabanında bu modele karşılık gelen tabloyu rails koaylıkla eşler. Daha sonra veri tabanı üzerinde işlem yapma, kullanıcıya bunu görünür hale getirme ve oluşturduğumuz yapıya metodlar ekleme(kontrol etme) işleri birbiriyle bağlantılı şekilde gerçekleştirilir.

Yukarıda bahsettiğim yapı MVC. Rails ‘in kullandığı mimarinin adıdır bu. Bu mimaride projeler birbiriyle bağlantılı üç katmanda yazılır. M(odel)-V(iew)-C(ontrol).

Model

Veri tabanı üzernde işlem yaptığımız, iş mantığının olduğu kısımdır. Bu yapı sayesinde veri tabanı işlemlerini nesne yönelimli şeklide yaparız.

Model dediğimiz yapı aslına baktığınızda tıpkı oop’de oluşturulan sınıf yapısıdır. Ancak farkı Active Record kütüphanesi sayesinde veri tabanı üzerinde işlemler yapabilmesidir. Model veri tabanında işlem yapabilen sınıftır diyebiliriz.

Model sayesinde 4 temel veri tabanı işelmelerini yaparız. CRUD. Create-Read-Update-Delete. Zaten bir model oluşturduğumuzda da rails otomatik olarak bu gerekli yollar ve gerekli metodları taslak olrak dosymıza ekler.

View

View, kullanıcıya gösterilen arayüzü temsil eder. Uygulamanızın HTML, CSS ve JavaScript kodlarını içerir. Bu kodlar genellikle Embedded Ruby (ERB), HTML içinde Ruby kodları içerir. Bu HTML kodumuzu dinamik hale getirir

Controller

Controller, kullanıcı isteklerini yöneten ve yanıtları üreten katmandır. Model ve View arasında köprü görevi görür. Kullanıcıdan gelen verileri alır, ilgili Model’ler ile etkileşime geçer ve sonuçları uygun View’lere gönderir. Controller, kullanıcının yaptığı istekleri işler ve uygun yanıtları oluşturur.

Bu gerekli metodların bulunduğu kısımdır. Yapı olarak yine sınıf yaspısıdır. Mesela modelimizin adı article ise controller’ının da adı ArticleController olur.

Şimdi genel işleyişi toparlarsak. Bir blog sitesinin bir makaleye gelen yorumu silmek istediğmizi kabul edelim.

1. Kullanıcı İsteği: Kullanıcı, web tarayıcısı aracılığıyla bir istek gönderir.

2. Controller: Bu istek, Rails tarafından uygun Controller’a yönlendirilir. burada controller silmek istediğimiz yorumun bilgilerini yani gerekli verileri önce modelden alır

Controller, isteği işler, gerekli verileri Model’den alır veya günceller ve sonucu View’e gönderir.

3. Model: Controller, veritabanı işlemleri için Model ile etkileşime geçer. Bildiğin üzere gerekli verileri veritabanından alma, güncelleme veya silme işlemlerini model gerçekleştirir. burada önce yorum hakkında bilgileri elde eder hangi yorumu sileceğimiz belirlendikten sonra da veri tabanından siler.

4. View: Controller, elde edilen verileri View’e gönderir. View, kullanıcıya gösterilecek HTML çıktısını oluşturur. yorumu sildiğimize göre yorumun bukunmadığı web sitenin son hali yada biz yorum silme işleminden sonra kullanıcıyı hangi ekrana yönlendirmek istiyorsak view da bu html sayfası işlenir.

5. Yanıt: Oluşturulan HTML, kullanıcıya geri gönderilir ve tarayıcıda görüntülenir.

Bu kadar nur topu gibi bir web siteniz oldu :))

Kısaca MVC, projemizin farklı bileşenlerini ayrı tutarak daha modüler ve yönetilebilir bir yapı sağladı.

Rails’in önemli özelliklerini özetle altı parçada aşağıda toparladım.

Konfigürasyon Yerine Varsayımlar (Convention over Configuration): Rails, ne yapmak istediğiniz ve bunu nasıl yapacağınız konusunda bazı varsayımlar yapar. Bu da sizi birçok konfigürasyon ayarından kurtararak hızlı bir şekilde işe başlamanızı sağlar.

Tekrarlamayan Kod (DRY — Don’t Repeat Yourself) İlkesi: Rails, kodunuzu basit tutmanızı ve aynı kodu tekrar etmemenizi vurgular. Bu da daha kolay yönetilen ve anlaşılır kodlar yazmanıza yardımcı olur.

RESTful Mimari: Rails, uygulamanızın tasarımını standart HTTP fiillerine (GET, POST, PUT, DELETE) ve bu fiillerin ima ettiği standart eylemlere göre yapılandırmanızı teşvik eder.

Aktif Kayıt (Active Record): Veritabanı ile etkileşimi kolaylaştıran bir katman sağlar. SQL sorguları yazmak yerine, Ruby kodu ile veritabanı işlemleri yapabilirsiniz.

Otomatik Test Desteği: Rails, uygulamanızın test edilmesi için kapsamlı destek sağlar. Bu, hata oranını azaltır ve kodunuzun güvenilirliğini artırır.

Get Gökçe Soylu’s stories in your inbox

Join Medium for free to get updates from this writer.

Yerleşik Güvenlik Özellikleri: Rails, XSS (Cross-Site Scripting), CSRF (Cross-Site Request Forgery) ve SQL enjeksiyonu gibi yaygın web uygulama güvenlik tehditlerine karşı yerleşik korumalar sağlar.

Kurulum/yöneticiler Hakkında

Ruby kurulumunda direkt hiç bir yönetici kullanmadan indirip kullanambilirsiniz. ancak birden fazla farklı sürümle çalışacaksanız hataa güncellemelerde kolaylık isterseniz bir yönetici ile indirmeniz mantıklı olur. Peki ya bu kadar seçenek arasında hangisini kullanmalıyız. Bu sorunun cevabı tamamen size, sizin ihtiyaçlarınıza bağlı. Aşşağıda her birinin güçlü ve zayıf yönlerini tek tek açıkladım.

RVM

rvm, en köklü fakat aynı zamanda kabuk değişiklikleri açısından en müdahaleci olanıdır.

rbenv daha düşük etkili ve hala çalışıyor.

rbenv’den bile daha hafif olduğu iddia edilen chruby. Bu yüzden benim tercihim chruby kullanmak oldu. Ama yinede her birinin özelliklerine tek tek bakalım.

RBENV

Rbenv’in temel güçlü yönleri şunlardır:

Şeffaf: Çalışırken rbenv önünüzden çekilir. Bazı Ruby sürümlerini yükleyin, ihtiyacınız olanı seçin ve artık rbenv ile etkileşime girmenize gerek kalmayacak. Aynı sistemde Ruby’yi çağıran diğer araçların, PATH’de olduğu sürece rbenv’in var olduğunu bilmelerine bile gerek yoktur.

Genişletilebilir: rbenv yalnızca minimum olanı yapar ve gerisini eklenti ekosistemine bırakır.

Taşınabilir: rbenv, Unix benzeri her sistemdeki herhangi bir kabukta çalışır. Tek bağımlılığı, temelde her sistemde standart olarak gelen bash yorumlayıcısıdır.

Ancak mekanizmasının bazı dezavantajları da vardır:

Yavaş: rbenv, Ruby’ye yapılan her çağrıyı engellediğinden, Ruby’nin yürütme süresine ~50 ms’lik bir ek yük ekleyebilir. Bu, Ruby’nin çoğu kullanımında fark edilmeyecektir, ancak hızın zorunlu olduğu zamanlarda sürtünmeye neden olabilir.

Katı: rbenv’in projeler arasındaki katı sürüm izolasyonu nedeniyle, bazı kullanıcılar bazı “küresel” (sistem düzeyinde) Ruby araçlarını tutmayı ve projelerinin içinden çağırmayı zor buldu. Benzer şekilde, diğer kullanıcılar, bir Ruby sürümü kullanan bir projeden başka bir Ruby sürümü kullanan bir komut dosyasına önemsiz bir şekilde “ödeme yapamayacaklarını” keşfetmişlerdir.

Kullanıcının ana dizinine yüklenen değerli taşlardan habersiz: rbenv, — user-install bayrağıyla yüklenen değerli taşların çalıştırılabilir dosyalarını, yani ~/.gem veya ~/.local/share/gem dizinleri altında kurulu olanları keşfedemez. Çözüm, rbenv tarafından yönetilen projelerdeki bu taşlara bağlı kalmaktan kaçınmak veya uygun ~/.local/share/gem/<engine>/<version>/bin dizinini kişinin PATH’sine manuel olarak eklemektir.

Aşağıda bu sorunlardan bazılarını çözen diğer Ruby sürüm yöneticilerine kısa bir genel bakış yer almaktadır.

CHRUBY

chruby, kabuğunuza bağlanan minimal bir Ruby sürüm yöneticisidir.

Ruby’nin yürütme süresi üzerinde hiçbir ek yükü yoktur çünkü geçişi isteğe bağlı olarak veya isteğe bağlı olarak bir proje dizinine CD’lediğinizde yapar. Ek olarak — user-installed gems’in yürütülebilir dosyalarını çalıştırmak için güçlü bir destek sunar.

Dezavantajları ise yalnızca bash ve zsh kabuklarında mevcut olması ve Ruby’yi çağıran diğer araçların sürüm değiştirmeye erişim sağlamak için bir oturum açma kabuğu yüklemesi veya açıkça chruby-exec’i çağırmanın gerekmesidir.

DIRENV

direnv, kabuğunuzdaki dizinleri değiştirdiğinizde projeye özgü ortam değişkenlerini yüklemek ve boşaltmak için kullanılan genel amaçlı bir araçtır. Özellikle bir sürüm yöneticisi olarak tasarlanmasa da, her proje için belirli bir Ruby sürümünü etkinleştirecek şekilde PATH ortam değişkenini (diğerlerinin yanı sıra) değiştirmek için kolayca kullanılabilir.

Bu yaklaşım temel olarak chruby hızına (ruby yürütme ek yükü yoktur) ve rbenv-vars işlevselliğine sahiptir.

Dezavantajı, yukarıda bağlantısı verilen kullanım kılavuzunun bazı manuel kurulum gerektirmesi ve .ruby sürümü dosyalarını kutudan çıktığı haliyle desteklememesidir.

ASDF

asdf, rbenv gibi çalışır ancak eklenti mimarisi aracılığıyla yalnızca Ruby sürümlerini değil aynı zamanda Node.js, Python ve daha birçok sürümü de yönetebilir. Farklı dillerin birçok sürümü arasında geçiş yapmanız gerektiğinde ancak her dil için ayrı bir sürüm yöneticisi kullanmak istemediğinizde makineler için uygundur.

Dezavantajı muhtemelen rbenv’den daha yavaş olmasıdır.

RTX

rtx, asdf’nin yerine geçecek bir alternatif olarak çalışan daha yeni, hızlı, çok dilli bir sürüm yöneticisidir.

RVM

RVM, rbenv’in alternatif olarak oluşturulduğu orijinal sürüm yöneticisidir. RVM ilk başta kullanıcı dostu görünebilir, ancak nasıl çalıştığını anlamak zordur ve tarihsel olarak kullanıcıları Ruby programlarının neden belirli bir şekilde bozulduğunu veya nasıl düzeltileceğini anlamadıkları bir durumda bırakmıştır. Belirli durumlarda Ruby sürümlerini kurmanın kolaylığı dışında, RVM’nin faydalarının ne olduğundan emin değilim ve kullanımını tavsiye edemem.

KONTEYNER MİMARİSİ

Ruby sürüm yöneticisi yalnızca aynı ana makinede çalışırken arasında geçiş yapılabilecek birden fazla Ruby sürümü olduğunda gereklidir. Konteynerli uygulamalarla, her uygulama kendi çalışma zamanı bağımlılıklarını bir araya getirebilir ve böylece teknik olarak aynı donanım üzerinde çalışan diğer uygulamalardan tam izolasyon elde edebilir. Ayrıca, geliştiricilerin, uygulamaları için bir kapsayıcı oluştururken genellikle bir Ruby sürüm yöneticisini çağırmalarına veya Ruby’yi derlemelerine gerek kalmaması için, kapsayıcıların halihazırda belirli bir Ruby sürümünü içeren, halka açık görsellere dayandırılması gerekir.

Dezavantajı ise konteynerleştirilmiş mimarinin, bu şekilde oluşturulan uygulamaları oluşturmak, sürdürmek ve dağıtmak için tüm farklı araçları öğrenmek zorunda kalma maliyetine sahip olmasıdır.

Benim tercihim kullanımının kolay olması ve hızı yavaşlatmamasından dolayı chruby oldu. Eğer chruby kullanarak ruby ve rails kurulumunu merak ediyorsanız hatta birde rails ile bir proje geliştirmek isterseniz diğer yazılarıma göz atabilirsiniz.

--

--