cPanel
cPanel Setup Ruby App คืออะไร
Setup Ruby App เป็นฟีเจอร์ที่มาพร้อมกับ cPanel เวอร์ชันใหม่ ช่วยให้ผู้ใช้ Shared Hosting สามารถรัน Ruby Application ได้โดยไม่ต้องเข้าถึง Server ผ่าน SSH หรือมีสิทธิ์ Root บน Server ฟีเจอร์นี้ทำงานร่วมกับ Passenger ซึ่งเป็น Application Server ที่รองรับหลายภาษา เช่น Ruby, Python และ Node.js
Passenger ทำหน้าที่เป็นตัวกลางระหว่าง Web Server (Apache หรือ Nginx) กับ Ruby Application ของคุณ เมื่อมี Request เข้ามา Passenger จะส่งต่อไปยัง Ruby App และส่ง Response กลับไปยังผู้ใช้งาน ทำให้คุณสามารถรัน Ruby on Rails, Sinatra หรือ Rack-based Application อื่น ๆ ได้บน Shared Hosting ทั่วไป
ข้อดีของการใช้ Setup Ruby App ผ่าน cPanel คือสามารถตั้งค่าทุกอย่างผ่าน GUI ไม่ว่าจะเป็นการเลือก Ruby Version, กำหนด Application Directory, ตั้งค่า Environment Variable และจัดการ Gems ทุกอย่างทำได้จากหน้าเว็บโดยไม่ต้องพิมพ์คำสั่ง
- รองรับ Ruby Version หลายเวอร์ชันในเวลาเดียวกัน (ขึ้นอยู่กับ Hosting Provider)
- ติดตั้ง Gems ผ่านอินเทอร์เฟซ Bundler ได้โดยตรง
- กำหนด Environment Variables แบบ GUI ไม่ต้องแก้ .env ด้วยตนเอง
- Start/Stop/Restart Application ได้จากหน้าเดียว
- ดู Log ของ Application เพื่อ Debug ได้สะดวก
ตรวจสอบว่า Ruby รองรับบน Hosting
ก่อนจะเริ่มสร้าง Ruby Application บน cPanel ให้ตรวจสอบก่อนว่า Hosting Provider ของคุณเปิดใช้งานฟีเจอร์ Setup Ruby App ไว้หรือไม่ เนื่องจากไม่ใช่ทุก Hosting Plan จะรองรับ Ruby ผ่าน Passenger โดยเฉพาะ Plan ราคาถูกมากอาจจะไม่มีฟีเจอร์นี้
วิธีตรวจสอบง่ายที่สุดคือเข้า cPanel แล้วค้นหาคำว่า "Ruby" ในช่อง Search ที่หน้าหลัก ถ้ามีไอคอน Setup Ruby App ปรากฏขึ้นมาแสดงว่า Hosting ของคุณรองรับ แต่ถ้าไม่พบไอคอนนี้เลย ให้ติดต่อ Support ของ Hosting เพื่อสอบถามว่าสามารถเปิดใช้งานได้หรือไม่
นอกจากนี้ควรตรวจสอบว่า Hosting Plan มี Resource เพียงพอสำหรับการรัน Ruby App เพราะ Passenger จะสร้าง Process แยกต่างหากในระบบ ซึ่งใช้ RAM มากกว่า PHP Application ทั่วไป โดยทั่วไปแนะนำให้มี RAM อย่างน้อย 256MB ต่อ Application
| สิ่งที่ต้องตรวจสอบ | วิธีตรวจสอบ | สถานะที่ต้องการ |
|---|---|---|
| Setup Ruby App Icon | ค้นหาใน cPanel Search Bar | ต้องพบ |
| Passenger Support | ถาม Hosting Support | ต้องรองรับ |
| Ruby Version ที่ต้องการ | ดูใน Dropdown ของ Setup Ruby App | ขึ้นอยู่กับ Provider |
| RAM ที่มีใน Plan | ดูจาก Resource Usage ใน cPanel | แนะนำ 256MB+ |
| Disk Space | ดูจาก cPanel File Manager | ต้องมีพื้นที่เพียงพอ |
สร้าง Ruby Application ใหม่
เมื่อตรวจสอบแล้วว่า Hosting รองรับ Ruby ให้เข้า cPanel และคลิกที่ Setup Ruby App ซึ่งมักอยู่ในหมวด Software หรือ Programming จากนั้นคลิกปุ่ม Create Application เพื่อเริ่มตั้งค่า
ฟอร์มสร้าง Application จะให้กรอกข้อมูลหลัก 4 อย่าง ได้แก่ Ruby Version ที่ต้องการใช้, Application Root (โฟลเดอร์ที่เก็บโค้ด), Application URL (URL ที่จะเข้าถึง App), และ Application Startup File ซึ่งเป็นไฟล์หลักที่ Passenger จะโหลดตอนเริ่มต้น
สำหรับ Ruby on Rails ให้ใส่ Application Root เป็นโฟลเดอร์ของ Rails App เช่น myapp และ Startup File เป็น config.ru ซึ่งเป็น Rack Configuration File มาตรฐานของ Rails สำหรับ Sinatra ให้ใส่ชื่อไฟล์หลักของแอปแทน เช่น app.rb
- เข้า cPanel และคลิก Setup Ruby App
- คลิกปุ่ม Create Application สีเขียว
- เลือก Ruby Version ที่ต้องการ (แนะนำ 3.x สำหรับโปรเจกต์ใหม่)
- กรอก Application Root เป็นชื่อโฟลเดอร์ที่จะเก็บโค้ด เช่น
myrubyapp - กรอก Application URL เป็น Path ที่ต้องการ เช่น
/appหรือเว้นว่างไว้ถ้าจะใช้ Root Domain - กรอก Application Startup File เช่น
config.ruสำหรับ Rails - คลิก Create เพื่อสร้าง Application
ติดตั้ง Gems ผ่าน Bundler ใน cPanel
หลังจากสร้าง Application แล้ว ขั้นตอนต่อไปคือการติดตั้ง Gems ที่โปรเจกต์ต้องการ cPanel Setup Ruby App มีอินเทอร์เฟซสำหรับรัน Bundler โดยเฉพาะ ซึ่งจะอ่าน Gemfile จาก Application Root แล้วติดตั้ง Gems ทั้งหมดให้อัตโนมัติ
วิธีใช้งานคือกลับไปที่หน้า Setup Ruby App แล้วคลิกที่ชื่อ Application ที่เพิ่งสร้าง จากนั้นในส่วน Installed Modules จะมีช่องให้ค้นหา Gem ที่ต้องการ พิมพ์ชื่อ Gem แล้วคลิก Add หรือถ้าต้องการติดตั้งจาก Gemfile ทั้งหมดให้คลิกปุ่ม Run Bundler
ถ้าโปรเจกต์มี Gemfile อยู่แล้ว ให้อัพโหลดไฟล์ Gemfile และ Gemfile.lock ขึ้นไปยัง Application Root ก่อน แล้วค่อยกด Run Bundler ระบบจะติดตั้ง Gems ตาม Version ที่ระบุใน Gemfile.lock ซึ่งช่วยให้ได้ Environment เหมือนกับที่ใช้พัฒนาในเครื่อง
- Gems จะถูกติดตั้งแยกในโฟลเดอร์
vendor/bundleของ Application - ไม่กระทบ Ruby Installation หลักของ Server
- ถ้า Gem ต้องการ Native Extension (C Extension) อาจใช้เวลานานหรือติดตั้งไม่ได้บาง Hosting
- Gems ที่ติดตั้งจะใช้ได้เฉพาะ Application นี้เท่านั้น ไม่ข้ามไปยัง Application อื่น
- สามารถระบุ Gem Version เฉพาะได้โดยใช้รูปแบบ
gem_name:version
ตั้งค่า Startup File และ Environment Variables
Startup File คือจุดเริ่มต้นที่ Passenger จะโหลด Application ของคุณ สำหรับ Ruby Application มาตรฐานที่ใช้ Rack Interface จะต้องเป็นไฟล์ที่ Export ตัวแปรชื่อ app หรือ application ซึ่งเป็น Rack App Object โดยทั่วไปจะชื่อ config.ru
สำหรับ Rails Application ค่า Default ของ config.ru ที่ Rails สร้างให้จะใช้งานได้กับ Passenger โดยตรง ไม่ต้องแก้ไขอะไรเพิ่มเติม แต่ถ้าเป็น Sinatra หรือ App ที่เขียนเอง ให้ตรวจสอบว่าไฟล์นั้น Export Rack Object ออกมาถูกต้องตามรูปแบบ
Environment Variables เป็นส่วนสำคัญที่ใช้เก็บข้อมูล Config ที่ไม่ควรอยู่ในโค้ด เช่น Database Password, API Key หรือ Secret Key Base ของ Rails ใน cPanel สามารถเพิ่ม Environment Variable ได้ในส่วน Environment Variables ของหน้า Application โดยใส่ชื่อ Variable และค่าแล้วกด Add
RAILS_ENV— ตั้งเป็นproductionสำหรับ Rails บน Server จริงSECRET_KEY_BASE— Key สำหรับ Encrypt Session ของ Rails (สร้างด้วยrails secret)DATABASE_URL— Connection String ของ DatabaseRACK_ENV— ตั้งเป็นproductionสำหรับ Sinatra และ Rack App อื่น ๆAPP_PORTหรือ Custom Variable อื่น ๆ ที่ App ต้องการ
หลังจากเพิ่มหรือแก้ไข Environment Variable แล้ว ต้อง Restart Application เสมอ เพราะ Passenger จะอ่านค่า Environment Variable ตอน Start เท่านั้น ถ้าไม่ Restart Application จะยังใช้ค่าเดิมอยู่
Restart และ Debug Ruby Application
เมื่อตั้งค่าทุกอย่างครบแล้ว ให้คลิกปุ่ม Restart ในหน้า Setup Ruby App เพื่อให้ Passenger โหลด Application ใหม่ สถานะของ Application จะแสดงเป็น Running (สีเขียว) เมื่อ Start สำเร็จ หรือ Stopped (สีแดง) ถ้าเกิดข้อผิดพลาด
ถ้า Application ไม่ Start หรือแสดง Error ให้ดู Log ใน Application Log File ที่อยู่ใน Application Root ของคุณ โดย Passenger จะสร้างไฟล์ Log ชื่อ log/passenger.log หรือ app_log โดยอัตโนมัติ ข้อความ Error ที่พบบ่อยมักเกี่ยวกับ Gem ที่ขาด, Path ผิด หรือ Syntax Error ในโค้ด
สำหรับ Rails Application ให้ตรวจสอบไฟล์ log/production.log ด้วย เพราะ Rails จะ Log Error ทุกอย่างไว้ที่นั่น รวมถึง Database Connection Error หรือ Exception ที่เกิดขึ้นขณะรัน Application คุณสามารถเปิดไฟล์ Log เหล่านี้ได้ผ่าน File Manager ใน cPanel โดยตรง
- คลิก Restart ทุกครั้งหลังแก้ไขโค้ดหรือ Config
- ดู Log ใน
log/passenger.logเมื่อ App ไม่ Start - ดู
log/production.logเมื่อ App Start แต่แสดง Error ขณะใช้งาน - ใช้ Stop แล้ว Start แทน Restart ถ้า Restart ไม่มีผล
- ตรวจสอบ Resource Usage ถ้า App หยุดทำงานบ่อย อาจเกิดจาก RAM เต็ม
ตรวจสอบว่า Ruby App ทำงานถูกต้อง
หลังจาก Restart Application แล้ว ให้ทดสอบเปิด URL ของ Application ในเบราว์เซอร์เพื่อดูว่าทำงานถูกต้องหรือไม่ ถ้าเห็นหน้าของ Ruby App แสดงว่าตั้งค่าสำเร็จ แต่ถ้าเห็น Error Page หรือ Blank Page ให้ตรวจสอบ Log ก่อน
ตัวอย่างโค้ดและคำสั่งที่ใช้บ่อยในการตรวจสอบ Ruby App บน cPanel มีดังนี้ โดยถ้า Hosting รองรับ SSH สามารถรันคำสั่งเหล่านี้ได้โดยตรง แต่ถ้าไม่มี SSH ให้ใช้ cPanel Terminal หรือดูผลผ่านไฟล์ Log แทน
# ตรวจสอบ Ruby Version ที่ใช้งาน
ruby -v
# ตัวอย่างผลลัพธ์: ruby 3.2.0 (2022-12-25 revision a528908271) [x86_64-linux]
# ตรวจสอบ Gems ที่ติดตั้งแล้ว
bundle list
# หรือดูเฉพาะ Gem ที่สนใจ
bundle show rails
# ตรวจสอบ config.ru ว่า Export Rack App ถูกต้อง
# ตัวอย่าง config.ru สำหรับ Sinatra App
require 'sinatra'
require_relative './app'
run Sinatra::Application
# ทดสอบ Rack App โดยตรงก่อน Deploy
rackup config.ru -p 3000
# ดู Environment Variables ที่ตั้งค่าไว้
printenv RAILS_ENV
printenv SECRET_KEY_BASE
แก้ปัญหาที่พบบ่อย
การรัน Ruby Application บน Shared Hosting ผ่าน cPanel อาจพบปัญหาต่าง ๆ โดยเฉพาะสำหรับผู้ที่เพิ่งเริ่มต้น ปัญหาส่วนใหญ่มักมาจากการตั้งค่าผิด Path หรือการที่ Passenger ยังไม่ได้รับการ Configure อย่างถูกต้อง ต่อไปนี้คือปัญหาที่พบบ่อยและวิธีแก้ไข
Ruby App แสดง 503 Service Unavailable — Passenger ยังไม่ Start
Error นี้หมายความว่า Web Server ไม่สามารถเชื่อมต่อกับ Passenger ได้ สาเหตุที่พบบ่อยที่สุดคือ Application ยังไม่ได้ Start หรือ Crash ไปแล้ว ให้เข้า Setup Ruby App แล้วตรวจสอบสถานะของ Application ถ้าแสดง Stopped ให้คลิก Start เพื่อเริ่มใหม่
ถ้า Start แล้วยังเจอ 503 อยู่ ให้ดู Passenger Log เพราะ Passenger อาจ Start ไม่สำเร็จเนื่องจาก Gem ขาดหายหรือ Syntax Error ในโค้ด นอกจากนี้อาจเกิดจาก RAM เต็มซึ่งทำให้ Passenger ไม่สามารถสร้าง Process ใหม่ได้ ลองติดต่อ Hosting Support เพื่อตรวจสอบ Resource
Gem ติดตั้งไม่ได้ — Permission ผิดหรือ Gem Server เข้าไม่ได้
ถ้ากด Run Bundler แล้วเจอ Error เกี่ยวกับ Permission ให้ตรวจสอบว่าโฟลเดอร์ Application Root มี Permission ถูกต้อง (755 สำหรับโฟลเดอร์ และ 644 สำหรับไฟล์) สามารถแก้ได้ผ่าน File Manager ใน cPanel
ถ้า Error บอกว่าเชื่อมต่อ RubyGems.org ไม่ได้ อาจเป็นเพราะ Hosting มี Firewall Block การเชื่อมต่อออกไปภายนอก ให้ติดต่อ Support เพื่อขอให้ Whitelist IP ของ RubyGems.org หรือถ้า Gem บางตัวต้องการ Native Extension เช่น nokogiri หรือ mysql2 อาจต้องให้ Support ติดตั้ง System Library ที่จำเป็นก่อน
Application.rb ไม่พบ — Startup File Path ผิด ต้องตรวจเส้นทาง
Error นี้เกิดเมื่อ Passenger หา Startup File ตาม Path ที่ระบุไว้ไม่เจอ ให้เข้า Setup Ruby App แล้วตรวจสอบค่า Application Startup File ให้ตรงกับชื่อไฟล์จริงที่อยู่ใน Application Root
ข้อผิดพลาดที่พบบ่อยคือใส่ Path แบบ Full เช่น /home/user/myapp/config.ru แทนที่จะใส่แค่ชื่อไฟล์ config.ru หรือ Relative Path จาก Application Root ให้ใส่เฉพาะชื่อไฟล์หรือ Path สัมพัทธ์จาก Application Root เท่านั้น นอกจากนี้ตรวจสอบตัวพิมพ์ใหญ่-เล็กด้วย เพราะ Linux Server ถือว่า Config.ru กับ config.ru ต่างกัน
Environment Variable ไม่มีผล — ต้อง Restart App หลังแก้ไข
Passenger อ่านค่า Environment Variable ครั้งเดียวตอน Start เท่านั้น ดังนั้นถ้าเพิ่มหรือแก้ไข Environment Variable ใหม่แล้ว App ยังไม่เห็นค่าใหม่ ให้กลับไปที่ Setup Ruby App แล้วคลิก Restart เพื่อให้ Passenger โหลดค่าใหม่
อีกสาเหตุหนึ่งคือชื่อ Variable พิมพ์ผิด เช่น RAILS_ENV พิมพ์เป็น Rails_Env ซึ่ง Linux เป็น Case-Sensitive ทำให้ App ไม่รู้จัก Variable นั้น ให้ตรวจสอบชื่อ Variable ให้ตรงกับที่ใช้ในโค้ดทุกตัวอักษร