Zaman gelir yeni birşeyler ararsın boş vakitlerini geçirecek. Sanki çok boş vaktin varmış gibi. Bende yeni bitme bir kaç dile bakıyordum. Python ve Ruby arasında bir seçim yapmak ihtiyacı hissettim kendimde. Python güzel bir dil ama COBOL'dan miras aldığı space ve tab'lara göre kodun derlenmesi bana pek uymadı. Öte yandan Ruby hakkında Joel'in kitabındaki yazıyı okuyunca işte bu dedim.
Önce Ruby on Rails framework'ünden başladım. Şu sitedeki yazıları okudum. Dilin İngilizce yazım kurallarına ve noktalama işaretlerine göre geliştirilmiş olması kod yazarken ilham veren bir olay. Hemen Windows için Apache, MySql ve Ruby'nin beraber sunulduğu bir paketi şu adresten indirdim.
Matt Griffith'in blogunda da 5 dakikada nasıl Ruby on Rails olayına gireceğinizi gösteren bir video var. Aşağıda anlattıklarım bu video ile paralel gidiyor.
Tabii ki Ruby henüz ASP.NET veya PHP gibi gelişmiş özelliklere sahip değil ve ticari veya yoğun kulanılan uygulamalar yazacak kadar güvenilir değil. Ama her dil yeni başladığında öyle değil miydi?
Ruby on Rails framework'ünde test ve production veritabanları her seferinde yeniden yaratılıyor. Tabii sizin belirlediğiniz kurallar çerçevesinde. Tüm geliştirme scriptler ile yapılıyor. Geliştirme, Test ve Production aşamaları için birer veritabanı mevcut. Genelde Nhibernate veya CodeSmith ile N-Tier veritabanına dokunmadan bir DAL (Data Access Layer) oluşturur. Ruby on Rails ile bu durum tam tersi. Önce DAL oluşturuyorsunuz sonra bunu baz alarak Ruby size veritabanını oluşturuyor.
Adım adım bende neler yaptığımı anlatayım.
Öncelikle indirdiğim paketi bir dizine açtım.
Benim sistemimde IIS ve MYSQL zaten çalışıyordu. Önce o servisleri kapatmak gerekiyor. Gidipte Ruby'nin konfigürasyon dosyalarını kurcalamak için pek bir isteğim yok. InstantRails.exe isimli programı çalıştırınca aşağıdaki ekran geliyor. Görüldüğü gibi Apache ve MYSql yeşil ışık yakmış.
Bu aşamadan sonra iki adet Ruby DOS ekranı açıyoruz. Bu DOS ekranlarından istediğimiz işleri yapacağız.
Ekranlarından birinden <rails demo> yazarak bir uygulama oluşturuyoruz. Bu komut rails_app dizini altında "demo" isimli bir klasör yaratıp gerekli diğer script ve dizinleri oluşturacaktır. Aşağıda bu komutun yarattığı dizinleri görüyorsunuz. Bu yazacağımız uygulamanın temeli olacak nesne ve fonksiyonları otomatik olarak oluşturur.
Açık olan DOS ekranından "demo" dizinine geçerek <cd demo> şu komutu verin:
ruby script/generate controller Blog
Bu komut Blog isminde bir controller sınıfı oluşturmak içindir.
Birde bir model oluşturmamız gerekiyor. Model veritabanı üzerindeki nesneleri temsil ediyor. Aşağıdaki komut ile modeli oluşturabilirsiniz.
ruby script/generate model Post
Şu aşamada hemen hemen her şey hazır. Bir kaç değişiklik yapıp veritabanını oluşturmamız gerekiyor. Veritabanını bizim oluşturacağımız DAL sınıfı ile oluşturacağı için öncelikle bunun kodunu yazmamız lazım.
C:\InstantRails\rails_apps\demo\db\migrate dizinine gidip (kurduğunuz dizine göre farklı yerde olabilir) 001_create_posts.rb dosyasını Notepad++ ile açın ve aşağıdaki şekilde değiştirin:
class CreatePosts < ActiveRecord::Migration
def self.up
create_table :posts do |t|
t.column :title, :string
t.column :body, :text
end
end
def self.down
drop_table :posts
end
end
Burada veritabanı oluşturulurken posts tablosunda iki adet saha olacağını belirtiyoruz (title ve body). Şimdi veritabanına nasıl erişeceğimizi soruyor olabilirsiniz. Henüz bunun için hiç bir şey yapmadık. Fakat Demo uygulaması oluşturulurken bu tür alt yapıların çoğu oluşturulmuş durumda geliyor.
Eğer C:\InstantRails\rails_apps\demo\config dizinine bakarsanız database.yml isimli bir dosyanın olduğunu göreceksiniz. Bu dosyada 3 tip veritabanı tanımlanmış bunlar development, test ve production veritabanları. Bu dosyaya göre demo_development isimli bir veritabanı bulunması gerekiyor. Bu isimde bir veritabanını MySql üzerinde oluşturun. Herhangi bir tablo oluşturmanıza gerek yok. Aşağıdaki yoldan PHPMyAdmin ekranını açarak demo_development isimli bir veritabanı oluşturun.
Apache'yi kapatmak içinde bu ekranı kullanacağız.
Create tuşuna tıklayıp veritabanını oluşturun. İşiniz bitince Internet Explorer'ı kapatabilirsiniz. Yukarıdaki ekrandan Apache'yi de kapatın.
Bu işlemlerden sonra artık Ruby'nin kendi web sunucusu WEBrick'i çalıştırabiliriz. Açık DOS ekranlarından birinden <demo> dizinine geçin ve aşağıdaki komut ile WEBrick'i çalıştırın.
ruby script/server
Görüldüğü gibi WEBRick port 3000'den çalışıyor. Bunu bu şekilde çalışır bırakın. Artık Controller nesnemizi düzenleyebiliriz. Bunun için C:\InstantRails\rails_apps\demo\app\controllers dizinindeki blog_controller.rb dosyasını gene Notepad++ ile açın ve aşağıdaki şekilde değiştirin.
class BlogController < ApplicationController
scaffold :post
end
Artık veritabanını migrate edebiliriz. Bunun içinde aşağıdaki komutu kullanacağız. Gene demo dizinindeyken:
rake db:migrate
komutunu verin.
Artık http://localhost:3000/blog adresine giderek uygulamanızı test edebilirsiniz. Hakikaten dedikleri kadar (web development that doesn't hurt) varmış.
New Post linkine tıkladığınızda aşağıdaki gibi yeni bir entry girebileceğiniz ekran gelecektir:
Bir şeyler yazıp Create tuşuna basın.
Linklerle oynayıp neler yaptığına bakın.
Ruby on Rails MVC (model, view, controller) metoduna göre hazırlanmış bir framework. Böylece verinin sunumu, saklanması ve üzerinde çalışılması gibi işlemler izole edilmiş durumda. 3 katmanlı bu metodun pek çok yararları var. örütbağında MVC olarak arattığınızda karşınıza pek çok link çıkacaktır. Genel olarak açıklamak gerekirse:
Model: Bir uygulamada var olan veri tiplerini ve sınıflarını belirlemeye yarar. Örneğin bir üniversiteyi model olarak ele aldığımızda burada öğrenci, öğretmen, ders, sınıf vb gibi veri tiplerinin bulunduğunu görüyoruz. Bunlar veritabanımızın tablolarını oluşturacaktır.
Controller: Veritabanından veri okumaya ve bu veriyi düzenlemeye yarayan bir dizi fonksiyondan ibaretir. Controller nesneleri VIEW nesnelerinin istediği veriyi sunmak ile yükümlüdür.
View: Verinin belli bir formatta sunulmasıdır.
Biraz daha kurcaladıktan sonra daha ayrıntılı yazacağım. Bu arada Rails ile yazılmış uygulamaları yayınlamak için hosting firmalarıda var. http://www.textdrive.com/ adresinden bakabilirsiniz. Fiyatlar şu aşamada ASP.NET'ten bile daha pahallı ama zaman içinde sanırım ucuzlar.