lab2023 - internet teknolojileri

Rails Projelerinde JQuery Autocomplete Kullanımı

Bunun için jQuery UI kütüphanesine ihtiyacımız var. Kütüphaneyi projemize eklemek için jquery-ui-rails gemini kulanacağız. Gemfile dosyasına gemi gem "jquery-ui-rails" ekledikten sonra bundle install komutunu çalıştıralım. Javascript kütüphanesini çağırmak için application.js dosyasına

1
//= require jquery.ui.autocomplete

Css kütüphanesini çağırmak için application.css.scss dosyasına

1
2
3
/*
*= require jquery.ui.autocomplete
*/

satırlarını ekleyelim.

Ruby on Rails Breadcrumbs(Ekmek Kırıntısı)

Breadcrumb için breadcrumbs_on_rails gemini kullanıyoruz. Gemfile’ a gem 'breadcrumbs_on_rails' ekledikten sonra bundle:install komutunu çalıştırarak gemi kuralım. Controller’ da add_breadcrumb metodunu çağırarak breadcrumb ekleyebiliyoruz. View katmanında ise render_breadcrumbs helper’ ı kullanıyoruz.

1
2
3
class Admins::ApplicationController < ActionController::Base
  add_breadcrumb "Dashboard", :admins_dashboard_index_path #I18n.t('nav.dashboard')
end

Globalize3 Ile Çoklu Dil Desteği (I18n)

Model katmanına I18n desteği eklemek için globalize3 gemini kullanıyoruz.

Gemfile’ a gem 'globalize3' ekleyip bundle install ile gemi kuralım.

Modelde I18n desteği eklenilecek fieldları belirtiyoruz.

1
2
3
4
class Country < ActiveRecord::Base
  attr_accessible :name
  translates :name
end

PostgreSQL Yedek Alma Ve Geri Yükleme

pg_dump

pg_dump veritabaniadi -f dosyaadi.dump

  • 1 vt yedeği alır.
  • Öntanımlı olarak düz metin yedek alır.
  • Yedeği sıkıştırabilir. pg_dump -Fc veritabaniadi -f dosyaadi.dump

  • Global veriyi almaz. (User, tablespace)

  • Sıkıştırılmış yedeği tablo bazında açma imkanı. Sadece sıkıştırılmış formattayken.
  • Sadece istenilen tabloların yedeğini alma -t "satislar." satislar tablosunun yedeğini al. -T satislar satislar dışındaki tabloların yedeğini al.
  • Sadece schema yı yedek alma -s
  • Sadece dataları almak. -a

pg_dumpall

  • Tüm veritabanlarının yedeğini tek dosyaya alır.
  • Sadece düz metin olarak yedek alır.(.sql)
  • Bir tablo veya database açılamaz. Yedekler olduğu gibi geri yüklenir.
  • Global bilgileri ayrı olarak yedekleyebilirsiniz. pg_dumpall -g -f dosyaadi.dump
  • Sadece schema yı yedek alma -s
  • Sadece dataları almak. -a

pg_dump & pg_dumpall

  • INSERT li yedek almaz. Bunun yerine COPY kullanılır. Sebebi her INSERT işleminin TRANSACTION içerisinde olmasıdır.

Kesinlikle pg_dump kullanın, yedeği sıkıştırın, global bilgileri pg_dumpall ile alın. Geri yüklerken önce global veriler yüklenir.

pg_restore

  • pg_restore -d veritabaniadi yedek.dump -j 4
  • Sadece sıkıştırlmış verileri geri yükler.
  • -j parelel oturum.

ab2013 postgresql eğitim notlarından.

İyi çalışmalar.

Ruby on Rails Application Template Oluşturma

Template nedir ?

Yeni bir rails uygulaması oluştururken genel görevleri otomatikleştirmek için yardımcı ruby script. Örneğin her rails projesinde devise gemini kullanıyorsak bunu her seferinde eklemek yerine template’ e ekleyip aynı işlemleri tekrarlamaktan kurtulabiliriz.

Template Oluşturma

Template oluşturmak için ne bir generator nede bir gem kullancağız. İçerisine bazı metodlar yazabileceğimiz bir ruby dosyası yeterli :)

Deploy İşlemleri Checklist’im

Deploy ederken birşeyleri atlamamak için kendime bir checklist oluşturdum. Deploy için Capistrano kullanıyoruz.

Branch Merge işlemleri

Merge işlemlerini kesinlikle komut satırından yapın.

  • Merge edilecek branch taki tüm kodların güncel olduğundan emin olun.
1
2
git checkout develop
git pull
  • Kodları test edin

  • Üçüncü part javascript, css dosyaları varmı bakın.

  • Varsa bunlar environments/production.rb ye eklenmişmi ona bakın. Assets precompile için.

  • Kendisine merge yapılcak branch’ taki kodların güncel olduğundan emin olun.

1
2
3
git checkout master
git pull
git merge --no-ff develop
  • config/deploy.rb dosyasını kontrol edin. IP, user, port…

Paperclip: Dosyaları Yeni Bir Yol (Path)’ a Taşımak

Dosya upload işlemleri için genellikle Paperclip kulanıyoruz. Paperclipte :path parametresi ile dosyanın hangi path altına kaydedeliceğini belirtebiliyoruz. Product modelindeki :picture için bir path belirledik. Dosyalar public/system/products/pictures/ dizinin altına :style(original, icon, small, large) klasörününde içine "#{id}-#{name.parameterize}.format" olarak kaydedilyor. Linklerde http://localhost:3000/system/products/pictures/original/1-bilgisayar.jpeg şeklinde oluyor. Peki biz bu path’ i ürün production’ a çıktıktan sonra değiştirirsek ne olur ?. Ne olacak tüm dosya linkleri patlayacak :) Yani eski dosyaları yeni path ile tekrar kaydettirmemiz gerekecek.

Ruby on Rails’ Te Ransack Gem’ I Ile Arama

Ransack ile kolay bir şekilde arama ve sıralama işlemlerini yapabiliyoruz. Gemfile dosyasına

gem 'ransack' satırını ekledikten sonra bundle install ile kuralım.

Arama için search metodunu kullanıyoruz.

1
2
>> Product.search(:name_cont => "aaaa").result.to_sql
"SELECT `products`.* FROM `products`  WHERE (`products`.`name` LIKE '%aaaa%')"
  • Aynı anda iki alanda arama yapmak istersek or kullanıyoruz.
1
2
>> Product.search(:name_or_barcode_cont => "aaaa").result.to_sql
"SELECT `products`.* FROM `products`  WHERE ((`products`.`name` LIKE '%aaaa%' OR `products`.`barcode` LIKE '%aaaa%'))"

Ruby on Rails’te Excel Export

Excel export işlemlerinde to_xls gemini kullanıyoruz. Export edilen excel dosyaları xls uzantısında oluyor.

Excel renderlermek için config/initializers/mime_types.rb doyasına mime type eklemeyi unutmuyalım.

1
Mime::Type.register "application/vnd.ms-excel", :xls

Gemfile dosyasına gem 'to_xls' ekleyip bundle install ile kuruyoruz.

Ruby on Rails REST API’de Access Token Kullanarak Kullanıcı Doğrulama

Öncelikle;

  • HTTPS kullanın. Çünkü HTTP kullanıldığında parametreler plain text olarak iletiliyor. Http Request’ leri dinleyen birisi keylerinize çok rahat ulaşabilir.

  • access_token’ ları url den parametre olarak almak yerine Http Header’ dan almak daha uygundur. Çünkü kullanıcı alışkanlıkları (kopyala-yapıştır-test et) yönündedir. URL de unutulan tokenlar güvenlik için tehlikeli olabilir.

Kullanıcı doğrulama ile ilgili daha önce yazdığım Ruby On Rails REST API’ de HTTP Basic Authentication Kullanarak Kullanıcı Doğrulama yazısını okuyabilirsiniz.

Ruby on Rails Ile Rails::API Gem’ini Kullanarak API Geliştirme

Daha önce API geliştirme ile ilgili Ruby On Rails’ te API Yazalım başlıklı bir yazı yazmıştım. Bu yazımda ise Rails::API gem’ ini kullanarak API geliştirmeyi anlatacağım.

Rails::API bir API için gerekli olan kütüphaneler dışındaki kütüphaneleri çıkararak(view, assests …), normal bir rails projesine göre daha hafif bir proje oluşturabilmemizi sağlayan gem.

Aşağıdaki komutu çalıştırarak gem’ i yükleyelim

gem install rails-api

Scp - Sunucuya Dosya Gönderip Alma

Merhabalar,

scp komutunu kullanarak;

  • Uzak bilgisayar (Sunucu) ile yerel bilgisayar (Locale) arasında
  • Uzak bilgisayar ile uzak bilgisayar arasında

dosya kopyalama işlemlerini yapabilyoruz.

MySQL Root şifresini Resetleme

root şifreside unutulurmu demeyin valla unutuluyor :)

  • MySQL server durdulur
1
2
3
$ service mysql stop
# veya
$ sudo /etc/init.d/mysql stop
  • --skip-grant-tables parametresi ile güvenli modda tekrar başlatalım. Güvenli modda başlatınca yetkilerin hiçbirisi dikkate alınmayacak.
1
$ sudo mysqld_safe --skip-grant-tables
  • MySQL konsoluna giriş yapalım
1
$ mysql -u root
  • root şifresini değiştirelim
1
2
3
4
mysql> use mysql;
mysql> update user set password=PASSWORD("NEWPASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
  • MySQL sunucusunu başlatalım
1
$ service mysql start

İyi çalışmalar…

MySQL’de Yeni Veritabanı Ve Veritabanı Kullancısı Oluşturma

  • MySQL’ e login olalım
1
$ mysql -u root -p
  • Veritabanı oluşturalım
1
mysql> CREATE DATABASE pigon_production;

pigon_production isminde bir veritabanı oluşturduk.

  • Şimdide bir kullanıcı oluşturalım ve pigon_production’ ı kullanabilmesi için yetki verelim.
1
2
mysql> GRANT ALL ON pigon_production.* TO 'pigon'@localhost IDENTIFIED BY 'pigon_password';
mysql> FLUSH PRIVILEGES;

Artık pigon kullanıcısı oluşturuldu ve pigon_production veritabanını kullanma yetkisi verildi. Buradaki yetki GRANT ALL komutundan da anlaşılacağı gibi veritabanı üzerinde tüm işlemleri yapabilme yetkisidir.

Kolaylıklar…

Sunucunun Ssh Portunu Değiştirme

ssh portu default olarak 22 dir. Güvenlik için istersek bunu değiştirebiliyoruz.

nano ile /etc/ssh/ dizinindeki sshd_config dosyasını açıp 5. satırdaki Port 22 yazan yerdeki 22 portunu değiştirip kaydediyoruz.

1
$ sudo nano /etc/ssh/sshd_config

Değişiklikler algılaması için aşağıdaki komut ile ssh’ ı yeniden başlatıyoruz.

1
$ sudo /etc/init.d/ssh restart

Localden bağlanırken portu belirtiyoruz.

1
$ ssh root@x.x.x.x -p 9387

-p parametresi ile portu belirtmiş olduk.

Eğer deploy işlemleri için Capistrano kullanıyorsak deploy.rb dosyasında aşağıdaki gibi portu belirtiyoruz.

1
set :port, 30000

İyi çalışmalar

Mysql’de Kullanıcı şifrelerini Değiştirme

MySQL şifre değiştirme işlemleri için kullandığım iki yöntem var. Onlardan bahsedeceğim.

mysqladmin komutunu kullanarak

1
$ mysqladmin -u root -pcurrentpassword password 'newpassword'

-pcurrentpassword teki p ile currentpassword bitişik. Bu alana şimdiki şifremizi newpassword alanınan da yeni şifremizi yazıyoruz.

Mysqldump Ile Veritabanı Yedeği Alma

Bugün sunucu üzerinde işlemler yaparken ne olur olmaz deyip mysql yedeğini alayım dedim. Aşağıdaki komut satırı ile veritabanı yedeğini alabiliyormuşuz.

mysqldump -u username -p database> backup_20121022.sql

mysql şifresini girdikten sonra bulunduğumuz dizine backup_20121022.sql isminde bir dosyaya veritabanı yedeğini alıyor.

İyi çalışmalar.

Ruby on Rails’te Client Side Validasyon

Client Side validasyonlar için ClientSideValidations gemini kullanıyoruz. Simple Form ile çalışabilmesi içinde ClientSideValidationsSimpleForm gemini kullanıyoruz.

Kurulum

Gemleri Gemfile’ a ekleyip bundle install yapalım

1
2
gem 'client_side_validations'
gem 'client_side_validations-simple_form'

Daha sonra kurulum komutunu çalştıralım.

1
rails g client_side_validations:install

config/initializers/client_side_validations.rb başlangıç dosyasının eklendiğini görüyoruz.

Eğer istersek gem’ lerin kullandığı javascript dosyaların assets dizinin altına kopyalayabiliriz.

1
rails g client_side_validations:copy_assets