13 Şubat 2013 Çarşamba

Ruby & Gem Hazırlama

Bu ara tekrar Ruby ile kodlamaya döndüğümden bir önceki yazımda bahsetmiştim. Ruby ile yazdığım uygulamayı kurulabilir hale getirmem için kendi gemimi oluşturmam gerekti. Gemi tanımlamak gerekirse paketlenmiş Ruby uygulamaları ya da kütüphaneleridir, diyebiliriz.

Gemlerin yapısı ise basitçe "gemspec" uzantılı bir betik ve diğer Ruby betiklerini içeren lib dizininden oluşur. gemspec dosyasında gemi tanımlayan özellikler yer alır. Bu özellikler gemin adı, sürümü, gem hakkında açıklama, geliştiricisinin adı, mail adresi gibi olabilir. Bunların pek çoğu gemi oluşturan kişinin seçimine bağlıdır, ancak geme isim verme gibi gerekli olan özellikler de yer almaktadır.

Örnek bir gem hazırlayalım, dizin yapısı aşağıdaki gibi olsun.
% tree
|-hello.gemspec
|-lib
  -- hello.rb
hello.gemspec dosyasının içeriği aşağıdakine benzer olmalı:
Gem::Specification.new do |s|
  s.name        = 'hello'
  s.version     = '0.0.1'
  s.summary     = "Hello world example"
  s.description = "Hello world gem"
  s.files       = ["lib/hello.rb"]
end
Buradaki s.files gemin içerdiği dosyaların yollarını belirtir. Eğer birden fazla dosya varsa her birinin yolunu belirterek virgüller ile ayırıp s.files dizisine yazabiliriz. hello.rb dosyamızın içerisine ise aşağıdaki gibi kodlarımızı ekleyebiliriz.
puts 'hello world'
Gem::Specification ile daha fazla belirtebileceğimiz özellikler için buraya bakabilirsiniz. Sonra oluşturduğumuz gemspec dosyasını inşa ediyoruz. İnşadan sonra isminde sürüm bilgisini de barındıran dosyayı yüklüyoruz.
$gem build hello.gemspec
$sudo gem install hello-0.0.1.gem
Sonra irb'de gemi deneyebiliriz. Aşağıdaki gibi:
require 'hello'
Gemde yer alan her bir betik dosyasını bu şekilde isteyerek uygulamamıza yüklemiş oluruz. Diğer gemlerinde yüklendiği yer olan
/var/lib/gems/1.9.1/gems/...
dizininde oluşturduğumuz gemi görebiliriz. Ayrıca "gem list | grep gem_adi" şeklinde bir gemin yüklü olma durumunu kontrol edebiliriz. Eğer yüklediğimiz gemi kaldırmak istersek de "sudo gem uninstall gem_adi" şeklinde yapabiliriz.

1 yorum:

  1. Selam. Ben kolaylık olsun diye böyle birşey kullanıyorum. Belki duymuşsunuzdur. https://gist.github.com/defunkt/326059

    YanıtlaSil