Migration Sql Dump    30/08/07

ActiveRecord::Migration kullanarak saf-ruby komutları ile şekillendirdiğimiz tabloların SQL çıktısını almak için projenin ana dizinine gelip

rake db:structure:dump

komutunu vermek yeterli olacaktır.

Oluşturulan sql dosyasını “db” klasöründe bulabilirsiniz.

Veritabanı yordamları, geliştirilen programdan sanki ayrı bir olay imişcesine yan kısımda tutulmuş, programa veritabansal olayları yaptırmak için çoğunlukla farklı farklı kütüphaneler kullanmak zorunda kalmıştık. ORM’ler bu konuda bir derece ilerleme kaydetselerde sorgulama olayları için yine ayrı bir dil olan SQL’e muhtaç oluyorduk.

Ambition Ruby dili için bunu ortadan kaldırmayı hedefleyen bi’ kaç kütüphaneden biri.

Ben artık şöyle bir sorgulama yapabiliyorum.

Giris.select { |g| g.kisa_baslik == "ornek-bir-yazi" }

Ya da şöyle bir sorgulama

>> Giris.sort_by { |g| [ g.kisa_baslik ] }.to_sql
=>
"SELECT * FROM girisler ORDER BY girisler.kisa_baslik"

Yahut şöyle;

> Giris.select { |g| g.aktif == 'true' }.size
=>
3
 
>>
Giris.select { |g| g.aktif == true }.sort_by(&:created_at).to_sql
=>
"SELECT * FROM girisler WHERE girisler.`aktif` = 1 ORDER BY girisler.created_at"

Enumerable sınıfı dahil olduğu için şöyle bir yazdırma tekniği kullanabiliyorum.

>> Giris.select { |g| g.aktif == true }.sort_by(&:created_at).each do |yazi|
?>
puts yazi.baslik
>>
end

Henüz eksiklikleri olmasına rağmen yakın bir zamanda hemen hemen tüm sorgulamalarımızı yapabileceğimiz hale geleceğine inanıyorum.

Bağlantılar

Ambition Readme
Blog girdisi

Case, If Söz Dizimi    28/08/07

durum = 1
 
# if kullanımı
 
if durum == 0
 
puts "Hata var!"
elsif durum == 1
 
puts "işlem başarılı"
elsif durum == 2
 
puts "başka bir mesaj"
elsif durum == 3
 
# falan
end
 
# case kullanımı
 
case durum
 
when 0
   
puts "hata var"
 
when 1
   
puts "işlem başarılı"
end

ipucu

Eğer bir fonksiyondan dönen integer değere göre ekrana mesaj yazdırmak isteniliyorsa en kısa yol şu olabilir:

  1. # örnek bir fonksiyon
  2. def durum(kosul)
  3.   kosul
  4. end
  5.  
  6. mesajlar = ["hata var", "işlem başarılı", "mesaj üç", "mesaj dört"]
  7. puts mesajlar[durum(0)]
  1. isim = 'İsmim'
  2.  
  3. puts "isminiz: #{isim}"
  4. # çıktı: İsminiz: İsmim
  5.  
  6. puts 'İsminiz: #{isim}'
  7. # çıktı: İsminiz: #{isim}

Rails uygulamaları geliştiriyor ve sunucu olarak Dreamhost kullanıyorsanız, uygulamanızda eklenti (plugin) kullanmadan önce eklentinin sunucuda çalışıp çalışmadığını test etmekte fayda var. Zira sonrasında fazlaca baş ağrıtabiliyor.

Dreamhost ve Rails Uygulaması

  • ssh üzerinden sunucuya bağlanın.
  • projenizi oluşturun: rails proje
  • yereldeki “app” klasörünü, “config/routes.rb” ve “public” klasöründe değiştirmiş olduğunuz dosyaları gönderin.
  • eklentilerinizi sunucuya kurun
  • config/environment.rb dosyasından projenizi “production” ortamına geçirin.
  • config/database.yml dosyasını güncelleyin.
  • rake db:migrate ile tablolarınızı ayarlayın.
  • public/.htaccess dosyanızı açın ve dispatch.cgi yi dispatch.fcgi ile değiştirin

Bir ipucu:

Dreamhost panelinde sayfanızın “home directory” alanına proje/public yazarak (subdomain yahut domain) alan adınıza erişenlerin direkt projeye girmesini sağlayabilirsiniz.

Eğer projelerinizde in_place_edit kullanıyorsanız, kullandığınız değer sıfırlandığında kullanıcının bunu yeniden değiştirme şansı olmayacaktır. Bu nedenle ufak bir kodla bu soruna çözüm bulabilirsiniz.

Öncelikle bunu uygulayacağımız “model”imizi açıyoruz ve kayıttan önce bu alanı kontrol ediyoruz.

class Ornek < ActiveRecord::Base
 
 
before_save :kontrol
 
 
private
   
def kontrol
     
self.aciklama = 'Açıklama Yazmak İçin Tıklayın' if self.aciklama.empty?
   
end
 
end

Sayfanızda değişkeni göstereceğiniz yerde ise ufak bir ön kontrolden sonra yazdırabilirsiniz.

def _yazdir(str)
 
str == 'Açıklama Yazmak İçin Tıklayın' ? '' : str
end

“Açıklama Yazmak İçin Tıklayın” i sabit olarak tanımlamak tabii ki her daim daha iyidir.

Kodlama sürecinde yazılım hata verdiği zaman diğer bir kısma geçmeyip o hatayı bulmaya çalışmak genelde daha uzun vaktin geçmesine sebep olabiliyor. Bugün böyle bir hatanın arayışında fazlaca bir zaman yitirdim, hatayı ve çözümü yazıyorum, başa gelebilecek türden bir hata.

Hata şu: “RJS ile sayfanın bir kısmını ‘partial’ bir dosya ile değiştireceğim ve bazı yerlere efektler vereceğim”

Basit bir olay, çalışmaması için bir sebep yok.

page.replace_html 'kategori_listesi', :partial => 'kategori_listesi'
page.visual_effect :highlight, 'kategori_ekle'

Lakin gel gör bu kod çalışmamakta direniyor. Kodlarda bir sorun yok, sebep şu:

_kategori_listesi.rhtml şu şekilde:
@kategoriler.each … bla bla

Hata Sebebi:
“Kategori Listesi” kategoriler adındaki değişkeni arıyor ve ekleme yaptıktan sonra bunu gözden kaçırıp döndürmemişiz.

Özet:
replace_html ile partial bir dosyanın içeriği koymak istiyorsanız değişkenleri mutlaka düzgün gönderin. Zira, Rails size herhangi bir hata vermiyor.

Rss Oluşturumu    11/08/07

Controller dosyamız:

# sondan başa son yazılar
 
def index
   
@liste = Giris.find(:all, :order => "updated_at, created_at" , :limit => 15, :conditions => 'ozel = false AND aktif = true')
   
@headers["Content-Type" ] = "application/rss+xml"
 
end

index.rxml dosyamız

xml.instruct!
xml.rss "version" => "2.0" , "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do
 
xml.channel do
   
xml.title 'SAYFA BAŞLIĞI'
   
xml.link url_for(:only_path => false, :controller => 'gunluk', :action => 'index' )
   
xml.pubDate CGI.rfc1123_date(@liste.first.updated_at)
   
xml.description h("AÇIKLAMA" )
   
@liste.each do |kayit|
     
xml.item do
       
xml.title kayit.baslik
       
xml.link url_for(:only_path => false,
                         :
controller => 'gunluk' ,
                         :
action => 'yazi' ,
                         :
id => kayit.kisa_baslik)
       
xml.description kayit.kisa_icerik
       
xml.pubDate CGI.rfc1123_date(kayit.updated_at)
       
xml.guid url_for(:only_path => false,
                         :
controller => 'gunluk' ,
                         :
action => 'yazi' ,
                         :
id => kayit.kisa_baslik)
       
xml.author "YAZAN"
     
end
   
end
 
end
end

XmlBuilder sınıfından faydalandık.

akif’den    09/08/07

Beep’e Hayır!    07/08/07

Özellikle laptop üzerinde çalışırken, olup olmadık anlarda çıkabilecek “Beep” sesi ile tüm dikkatleri üzerine çekebilirsiniz. (Dikkat çekmek isteyenlere duyurulur ayrıca)

Windows üzerinde “Beep” sesini engellemek için şu yol mevcut imiş MSDN‘den edindiğim bilgilere göre:
net stop beep

Bir diğer yolda şu:
regedit > HKEY_CURRENT_USER > Control Panel > Sound > Beep : No

Linux üzerinde KDE için ayarlardan bunu direkt kapatabiliyoruz. (Sistem Zili)

Pardus & Postgresql    06/08/07

Pardus üzerinde hızlıca Postgresql’i kurmak için aşağıdaki adımları izleyebiliriz:

  • Postgresql kurulumu ( pisi it postgresql-server )
  • Servisi açalım: service postgresql-server start
  • Kullanıcımız için “role” oluşturalım (Konsolda)

    muarifer@muarifer ~ $ su
    Parola:
    muarifer muarifer # su postgres
    postgres@muarifer muarifer $ createuser muarifer
    Shall the new role be a superuser? (y/n) y

    exit
    exit

  • Veritabanımızı oluşturalım: createdb VERITABANI
  • Veritabanına bağlanmak için: psql -d VERITABANI

Sayfada yayımlanan yazılar aksi belirtmedildiği sürece Murat Arif Çeliker'e aittir. Yorumlar, yorumu yapan kullanıcıların kendi görüşleridir.
açılış - deneyhane - tasarılar - hakkımda - iletişim -

Sitede altyapı olarak Wordpress kullanılmıştır.