วันพุธที่ 8 ธันวาคม พ.ศ. 2553

การตั้งค่าใช้งาน Ruby on Rails ผ่าน Passenger + Nginx

สมมุติว่าเราเขียน Ruby on Rails มาได้ระดับหนึ่งแล้ว อยากจะเอาเว็บไซต์ที่เขียนขึ้นไปไว้บนอินเตอร์เน็ต นั่นก็หมายความว่าเราต้องทำเครื่อง server สำหรับ production ใช่ไหม ?

ทางเลือกที่ทำได้จะมีประมาณนี้ (จะใช้คู่กับ Apache หรือ Nginx ก็จะคอนเซปเดียวกัน ต่างกันเพียง ไฟล์คอนฟิก เท่านั้น)
1. Mongrel ธรรมดา (ข้อดี ง่ายสุด, ข้อเสีย ไม่ scale)
2. Mongrel cluster (ข้อดี ง่าย, scale)
3. Passenger (ข้อดี scale, ข้อเสีย ตั้งค่าในครั้งแรกยาก)

สำหรับตอนนี้จะสอน การตั้งค่าใช้งาน Ruby on Rails ผ่าน Passenger + Nginx
เข้าไปที่ gem passenger (จะ install ผ่าน # gem install passenger ก็ได้นะ แต่ผนคิดว่า ถ้าติดตั้งผ่าน port มันจะมีการตรวจสอบเรื่อง module ที่เกี่ยวข้องไว้ครบมากกว่า)

# cd /usr/ports/www/rubygem-passenger

ถ้ามีการติดตั้ง passenger เสร็จ จะได้ ที่อยู่ของโปรแกรมประมาณนี้
# whereis passenger
passenger: /usr/local/bin/passenger

[nutjang@nginx81 ~]$ /usr/local/bin/passenger --version
Phusion Passenger version 3.0.0

"Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.

[root@nginx81 /usr/local/etc/nginx]# passenger-config --root
/usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.0

[root@nginx81 /usr/local/etc/nginx]# whereis ruby
ruby: /usr/local/bin/ruby /usr/local/man/man1/ruby.1.gz
[root@nginx81 /usr/local/etc/nginx]#

หลังจากตรวจสอบการติดตั้งเรียบร้อยแล้ว ให้เข้าไปแก้ไข nginx.conf เพื่อเริ่มเปิดใช้งาน passenger

http {

...

passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.0;
passenger_ruby /usr/local/bin/ruby;

...


}

กรณี เครื่อง Server นี้ มี 1 เครื่อง 1 โดเมน (พูดง่ายๆ ก็คือ ไม่ทำ virtual host) ก็แก้ตรง server ใน ไฟล์ nginx.conf ได้เลย โดยใส่ parameter ตามข้างล่างนี้ (สังเกตุ ตรง root dir จะชี้ไปที่ rails_app/public นะ)

server {
listen 80;
server_name www.nutjang1.com;
root /home/nutjang/rails/2.3.5/test1/public;
passenger_enabled on;
rails_env development;
}

แก้ไขเรียบร้อย ลอง restart nginx ซักที จากนั้นเปิด browser ดูผล

# /usr/local/etc/rc.d/nginx restart




(ในกรณีของผม ผมแก้ ไฟล์ hosts ในเครื่องไว้แล้ว จ้ะ)
c:/windows/system32/drivers/etc/hosts

สำหรับเครื่อง เซิฟเวอร์ที่จะทำ Virtual host ด้วยก็รอตอนหน้าจ้ะ (แต่คิดว่า น่าจะทำกันเองได้ปแล้วนะ เพราะ concept เดียวกันเลย)

1 ความคิดเห็น: