คราวที่แล้ว ผมติดตั้ง Ruby on Rails บน Ubuntu Dapper โดยใช้ WEBrick ซึ่งเป็นเว็บเซิร์ฟเวอร์ขนาดเล็กที่มีในแพกเกจ RoR อยู่แล้ว คราวนี้เรามาติดตั้งระบบสมบูรณ์ที่สามารถใช้ทำงานจริงได้ โดยเปลี่ยน WEBrick เป็น Apache แทน
ปรากฎว่าเจอบทความที่มีคนเขียนไว้แล้ว ใช้อันนี้อ้างอิงละกัน จะได้ไม่ต้องเขียนใหม่ Ruby, Rails, Apache2, and Ubuntu Breezy (5.10) ลองบน Dapper ก็ประสบความสำเร็จดี
ติดตั้งเซิร์ฟเวอร์
เนื่องจาก Ubuntu ไม่ได้เป็นลินุกซ์สำหรับเซิร์ฟเวอร์ ดังนั้นเราจึงต้องลงทุกอย่างเอง แต่ด้วยความสามารถของ apt-get ก็ไม่ต้องใช้หัวอะไรเลย แพกเกจที่สำคัญมีดังนี้
- Apache2 - เว็บเซิร์ฟเวอร์
- MySQL server - ฐานข้อมูล
- mod_fcgid ของ Apache - สำหรับใช้ FastCGI ในการรัน RoR
- และตัว Rails เอง
apt-get จะจัดการกับ dependencies ให้อัตโนมัติ ชื่อแพกเกจที่ต้องใช้ทั้งหมด ดูตามลิงก์ที่ว่าครับ
การติดตั้งควรมีพื้นฐานการดูแลเซิร์ฟเวอร์มาบ้าง ถ้ามีปัญหาลองอ่านตามลิงก์พวกนี้ เผื่อจะเข้ากรณีกัน
- Ubuntu, Rails, Typo and Apache2
- How to install Ruby on Rails on Ubuntu 5.10
- Rails On Ubuntu Debian Testing And Unstable
- Rails Troubleshooting Steps
phpMyAdmin
ส่วนที่ผมแนะนำเพิ่มเติม คือติดตั้ง phpMyAdmin เวลาสร้างตารางจะได้สะดวกๆ การติดตั้งก็ง่ายมากเช่นเดียวกัน
sudo apt-get install phpmyadmin
โดยมันจะไปอยู่ที่ /var/www/phpmyadmin
แต่ phpmyadmin ดูจะมีปัญหากับ MySQL บน Dapper นิดหน่อย ลองหาสาเหตุดูก็พบว่าไดเรคทอรีของ mysqld ไม่กำหนดสิทธิ์ให้เข้าได้ ต้องแก้ไขนิดหน่อย
sudo chmod +x /var/run/mysqld
และไม่ควรปล่อย password ของ MySQL ว่างไว้เฉยๆ แบบผม (ค่าดีฟอลต์เป็น root/ว่าง) เพื่อความปลอดภัยถ้าจะเอาไปรันจริง
โปรเจคต์ Recipe
ในตัวอย่างอันบนสุด เค้าลองแค่รัน Hello ง่ายๆ ให้ดูแบบคราวที่แล้ว เรามาลองสร้างโปรแกรมจริงๆ ที่ต่อกับ MySQL ผมใช้ตัวอย่าง Recipe ของ Rolling with Ruby on Rails เช่นเดิม ส่วนตัว RoR ใช้ testapp ของคราวก่อน
ขั้นตอนมีดังนี้
- เปิดเบราว์เซอร์ไปที่ http://localhost/phpmyadmin ถ้าไม่ทำอะไรผิดก็ควรเจอ phpMyAdmin ขึ้นมาทำงาน
- สร้างฐานข้อมูลชื่อ testapp
- สร้างตารางชื่อ recipes จำนวน 3 ฟิลด์ ดังนี้
- ฟิลด์แรกชื่อ id ชนิด int กำหนดเป็น auto_incremental และ primary key (รูปกุญแจ)
- ฟิลด์ถัดมาชื่อ title ชนิด varchar (255)
- สุดท้ายชื่อ instruction ชนิด text
- ผมถือว่าสร้าง testapp ไว้แล้วนะครับ ออกมาที่ไดเรคทอรี testapp สั่งดังนี้ (ถ้าเก็บไว้ที่ /var/www อาจต้องสั่ง sudo ก่อน)
testapp$ vi config/database.yml
แก้ไขชื่อฐานข้อมูล testapp_ ต่างๆ ให้เป็น testapp เฉยๆ ให้หมด
- จากนั้นเริ่มสร้างโปรเจคต์ Recipe
testapp $ ruby script/generator model Recipe
testapp $ ruby script/generator controller Recipe - แก้ไขไฟล์ testapp/app/controllers/recipe_controller.rb ดังนี้
class RecipeController < ApplicationController
scaffold :recipe
endจะเห็นว่ามีโค้ดส่วน scaffold บรรทัดเดียวที่เราเขียนเพิ่ม
- เปิดเบราว์เซอร์ไปที่ http://localhost/testapp/recipe/new จะเห็นหน้าตาโปรเจคต์ Recipe ด้วยโค้ดบรรทัดเดียว!!
แพกเกจเพิ่มเติมที่แนะนำให้ลง (สำหรับ Ubuntu ที่ยังไม่ได้ลงอะไรเพิ่ม) คือ sshd สำหรับการล็อกอินเข้ามาแก้โค้ดจากเครื่องอื่น
มาถึงขั้นนี้เราก็พร้อมจะพัฒนาโปรแกรมด้วย Rails อย่างเป็นเรื่องเป็นราวแล้ว
ปัจจุบันใช้ debian+apache2+mod_ruby+mysql อยู่ใช้งานได้ดีครับผม
อ่านใน mailing list เขาบอกว่า fcgi เร็วกว่า mod_ruby ไม่รู้จริงเท็จประการใด แต่ส่วนตัวชอบ eruby มาเลยเหมือนเอา ruby ใส่ลง html เหมือน php เลย
ทำไมไม่มีใครทำสำหรับภาษา perl บ้างหว่า
PoR "perl on rails" ฮึๆ
คนเขียน ruby ก็ได้แรงบันดาลใจของ syntax บางส่วนมาจาก perl หนิ (ถึงได้มี predefined var. ตรึม)
สงสัยต้องลองทำดูซะแล้ว สนุกแน่ๆ
FastCGI
FastCGI เร็วกว่า mod_ruby (เยอะ)มากๆ ครับ
ฝั่งผมทำงานกับ Lighttpd + fcgi + RoR + MySQL อยู่ มีวิธี Install อยู่ที่ [url=http://hivelogic.com/articles/2005/12/01/ruby_rails_lighttpd_mysql_tiger]Hivelogic[/url]
แต่ Rails มันยอดจริงๆ ครับ :P ติดใจ ไม่ได้กลับไปแตะ PHP มาหลายเดือนแล้ว...
รบกวนช่วยดูที่นี่ให้หน่อยซิครับ
http://discuss.joelonsoftware.com/default.asp?joel.3.309321.3
อยากขอความเห็นเฉย ๆ น่ะครับ (จริง ๆ แล้ว คือขี้เกียจศึกษา ruby อีกน่ะครับ )
อันนั้นก็อ่านซักพักนึงแล้วเหมือนกัน คิดว่าความรู้และประสบการณ์ที่มีกับ RoR ยังไม่สามารถบอกได้ว่ามีข้อดีข้อด้อยยังไง ข้้อจำกัดอะไรครับ