Rails

การติดตั้ง Nginx, Passenger และ Rails 3 บน CentOS

1. ติดตั้ง Nginx

$ rvmsudo passenger-install-nginx-module

2. ติดตั้ง Rails

$ gem install rails

3. เนื่องจากต้องใช้คำสั่ง start-stop-daemon แต่ใน CentOS ไม่มีจึงต้องลงเพิ่ม

$ wget http://developer.axis.com/download/distribution/apps-sys-utils-start-stop-daemon-IR1_9_18-2.tar.gz
$ tar xvfz apps-sys-utils-start-stop-daemon-IR1_9_18-2.tar.gz
$ cd apps/sys-utils/start-stop-daemon-IR1_9_18-2/
$ gcc start-stop-daemon.c -o start-stop-daemon
$ cp start-stop-daemon /usr/sbin/

4. ติดตั้ง script สำหรับใช้งาน Nginx

$ cd /etc/init.d

การใช้ session ใน cancan

โดยปกติแล้วไม่สามารถใช้ session ใน cancan ได้ แต่หากจำเป็นต้องใช้ Ryan Bates บอกให้สร้าง method เพื่อส่ง session ใน application_controller.rb ก่อน

# in application_controller.rb
def current_ability
  @current_ability ||= Ability.new(current_user, session)
end

แก้ไข initialize ใน ability.rb

# in ability.rb
def initialize(user, session)
  # ...
  can :update, Comment, :id => session[:comments_ids].to_a
end

เพียงเท่านี้ก็สามารถใช้ session ใน cancan ได้แล้ว

การติดตั้ง Phusion Passenger และ Nginx พร้อม SSL

การติดตั้ง Phusion Passenger และ Nginx ทั่วไปจะยังไม่สามารถใช้งาน SSL ได้ ดังนั้นจึงจำเป็นต้องติดตั้งใหม่อีกครั้ง ดังนี้
1. ติดตั้ง Passenger

sudo gem install passenger

2. ดาวน์โหลด Nginx ไว้ที่ /tmp

cd /tmp
wget http://nginx.org/download/nginx-0.8.53.tar.gz
tar xzf nginx-0.8.53.tar.gz

การทำ highlight ให้ text ของ Rails

งานที่ทำในตอนนี้ต้องทำในส่วนของการค้นหา โดยต้องมี highlight ให้ text ที่ตรงกับคำค้นหา ซึ่งการให้ทำ highlight นั้น Rails Framework ได้เตรียม text_helper ไว้ให้ใช้งานแล้ว โดยมีลักษณะดังนี้

highlight(text, phrase, highlighter = '<font color="#ff0000">\1</font>')

ตัวอย่าง คือ <%= highlight('You searched for: rails', 'rails') %>
ผลลัพธ์ที่ได้ คือ You searched for: rails

แต่ข้อด้อย คือ ไม่รองรับการทำ highlight ของคำหลายๆ คำ เช่น

การใช้ calendar_helper ใน Rails

ในบางครั้งเราจำเป็นต้องมีการใช้ปฏิทินเพื่อแสดงเหตุการณ์ที่เกิดขึ้นของแต่ละวัน หรือแสดงวันที่มีการประชุม เป็นต้น โดยมากนั้นเราจะใช้ JavaScript ในการทำปฏิทิน แต่สำหรับคนที่เล่น RoR นั้น จะมี plugin ที่ชื่อว่า calendar_helper มาให้ใช้ เรามาดูวิธีการใช้งานกันดีกว่า

1. ติดตั้ง plugin โดยใช้คำสั่งดังนี้

ruby script/plugin install calendar_helper

2. ให้ generate calendar เพื่อให้สามารถใช้ css ที่มีมาให้ได้ (มี 3 สีมาให้เลือก คือ แดง น้ำเงิน เทา) โดยใช้คำสั่งดังนี้

ruby script/generate calendar

การตั้งค่าให้ Rails ใช้งาน Gmail SMTP Server

1. ให้นำ code ด้านล่างนี้ไปไว้ใน directory ชื่อ lib และตั้งชื่อไฟล์คือ smtp_tls.rb

require "openssl"
require "net/smtp"
 
Net::SMTP.class_eval do
  private
  def do_start(helodomain, user, secret, authtype)
    raise IOError, 'SMTP session already started' if @started
    check_auth_args user, secret, authtype if user or secret
 
    sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
    @socket = Net::InternetMessageIO.new(sock)
    @socket.read_timeout = 60 #@read_timeout
 
    check_response(critical { recv_response() })
    do_helo(helodomain)

การใช้ autocomplete ใน Rails

สร้างฐานข้อมูลโดยมี table ชื่อ dishes และมี field ดังนี้

create table dishes (
  id int not null auto_increment,
  name varchar(50) not null,
  descript varchar(100),
  primary key(id)
);

ใส่ข้อมูลลงในฐานข้อมูลที่ได้สร้างขึ้นมา โดยข้อมูลตัวอย่างมีดังนี้

insert into dishes (name, descript) values ("ข้าวผัดกะเพราหมูแดง", "ผัดกะเพราหมูแดง");
insert into dishes (name, descript) values ("ข้าวคะน้าหมูกรอบ", "ผัดคะน้าใส่หมูกรอบ");
insert into dishes (name, descript) values ("ข้าวคอหมูย่าง", "เนื้อหมูย่างราดน้ำจิ้มเผ็ด");