Muhammet Dilek

Ruby, Ruby On Rails, HTML5, CSS3

Git Branch Silmek

Local branchı silmek.

1
git branch -d local_branch

Sunucudaki branchı silmek.

1
git push origin :remote_branch

Not: Eğer aşağıdaki gibi bir hata alırsanız daha önce birisi bu branchı silmiştir.

1
2
3
4
error: unable to push to unqualified destination: remote_branch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@repository_name'

Aşağıdaki kod ile local branchları sunucudaki branchlarla senkronize edebilirsiniz.

1
git fetch -p

Kolaylıklar…

Rails Sql Dosyasını Çalıştırma

Projelerde ön tanımlı verileri genelde rake yazarak gömüyoruz. Elimizde bulunan bir sql dosyasını aşağıdaki kodlar ile çalıştırabiliyoruz.

Örneğin adres verilerini eklemek için bir rake yazalım.

1
2
3
4
5
6
7
8
9
10
11
12
namespace :address do
  desc "import data from files to database"
  task :install => :environment do
    sql = ""
    source = File.new("#{Rails.root}/lib/tasks/address.sql", "r")
    while (line = source.gets)
      sql << line
    end
    source.close
    ActiveRecord::Migration.execute(sql)
  end
end
1
rake address:install

sql değişkenine sql dosyasını satır satır okuyup yazıyoruz. Daha sonrada bu sql değişkenini ActiveRecord::Migration.execute(sql) ile koşuyoruz.

Kolay gelsin.

Nginx Farklı Domaine Yönlendirme

Nginx’ te bir domaine gelen istekleri farklı bir domaine yönlendirmek için rewrite modülünü kullanıyoruz.

1
2
3
4
server {
    server_name www.domain.com;
    rewrite ^ http://www.yonlendirilecekdomain.com$request_uri? permanent;
}

Daha detaylı öğrenmek için aşağıdaki kaynağı inceleyebilirsiniz.

HTTPRewriteModule

Rails 4 Active Record Sorgularına Eşit Değildir Desteği Geldi

SQL’ de eşit olmayanları getir != sorgusu Active Record’ a eklendi.

Rails 3

Rails 3 te “Eşit Olmayan” != koşulunu where içine yazıyorduk.

1
Article.where("title != ?", params[:title])

Rails 4

Rails 4 te ise not metodunu kullanacağız. Method where.not şeklinde kullanılmalıdır.

1
2
Article.where.not(title: 'Rails 3')
# >> SELECT "articles".* FROM "articles" WHERE ("articles"."title" != 'Rails 3')

not metodu array olarak değer alabilir. Bunlarıda SQL’ de NOT IN diye koşacaktır.

1
2
Article.where.not(title: ['Rails 3', 'Rails 5'])
# >> SELECT "articles".* FROM "articles" WHERE ("articles"."title" NOT IN ('Rails 3', 'Rails 5'))

Kolay gelsin…

Heroku Pgbackups

Pgbackups db:pull alternatifi olarak kullanabileceğimiz bir addons. Herokudaki veritabanı yedeğini almamızı sağlıyor.

Projeye ekleme

1
heroku addons:add pgbackups

Yedek alma

1
heroku pgbackups:capture

Yedekleri görüntüleme

1
heroku pgbackups

pgbackups

İndirme

1
heroku pgbackups:url b001

Restore

1
pg_restore --verbose --clean --no-acl --no-owner -h host -U kullanici -d veritabani b001.dump

Silme

1
heroku pgbackups:destroy b001

Kolaylıklar…

Heroku Notları

Localdeki farklı branchı deploy etme

Localdeki branch design olsun. Herokudaki branch master olsun.

1
git push heroku design:master

Komut çalıştırma

1
2
3
heroku run console
heroku run db:migrate

Loglara bakma

1
heroku logs

Paperclip Ile Urlden Resim Yükleme

Merhabalar;

Bugün paperclip ile url den resim yükleme ihtiyacım oldu. Ufak bir araştırma sonucu çözüme aşağıdaki gibi ulaştım.

1
2
3
class Home < ActiveRecord::Base
  has_attached_file :cover_photo
end
1
2
3
@home = Home.find(1)
@home.cover_photo = URI.parse(url)
@home.save!

İyi çalışmalar dilerim.

Exception Notification (Hata Bildirici)

Exception Notification sunucuda oluşan hataları Mail, Campfire, Webhook yolu ile bildiren bir gem. Bu yazıda Mail ile hata bildirimini anlatacağım.

Gemfile dosyasına gemi ekleyip bundle install ile kuralım.

1
gem 'exception_notification'

Sonra environmet dosyalarına(environment/production.rb veya development.rb ) aşağıdaki kodu ekleyelim.

1
2
3
4
config.middleware.use ExceptionNotifier,
                        :email_prefix => "[Proje İsmi] ",
                        :sender_address => %{"notifier" <no-reply@lab2023.com>},
                        :exception_recipients => %w{mailgidecekadres@lab2023.com mailgidecekadres1@lab2023.com}

:email_prefix email başlığının ön eki. Email başlığı “Proje İsmi hata mesajı” şekline oluyor.

:sender_address mailde gösterilecek gönderici adresi.

:exception_recipients mail gidecek adresler. Buraya birden fazla adres eklenebilir.

Sadece bu ayarları yaparak sunucudaki hataları mail olarak alabiliriz.

Ruby Metodtan Birden Fazla Değer Döndürme

Metodtan dizi olarak kolay bir şekilde birden fazla veri döndürebiliyoruz.

1
2
3
4
5
6
7
8
9
10
11
def foo(x)
  return x, x+1
end

a, b = foo (10)
#=> [10, 11]
>> a
10

>> b
11

a ve b otomatik olarak dönen dizideki değerleri alıyor. Ruby’ de dizideki değerleri değişkenlere atamaya biraz bakalım.

ActiveModel Absence Validator

Rails 4 ile validates_absence_of validasyonu geliyor. Bu validasyon ne yapar ? Şu an Active Model de bulunan validates_presence_of validasyonunun ters validasyonunu yapar. Bu alan boş bırakılmalıdır!

1
2
3
4
5
6
7
class SuperHero
  include ActiveModel::Validations

  attr_accessor :secret_identity

  validates :secret_identity, absence: true
end

Eğer secret_identity ye bir değer atarsak “must be blank” diye bir hata mesajı alacağız.

1
2
3
4
5
6
super_hero = SuperHero.new
super_hero.valid?
# => true
super_hero.secret_identity = 'Hal Jordan'
super_hero.valid?
# => false

İyi çalışmalar…