ก็เลยจะ deploy ให้เหมือนกันสถานการณ์การทำงานจริง
ปกติใน rails เราสามารถ run application ได้ 3 แบบหลักๆ คือ
- ผ่านทาง WebBrick
เจ้า WebBrick เป็น web server ที่เขียนด้วย Ruby
เป็นสภาพแวดล้อมที่เหมาะสมอย่างยิ่งกับการ debug - ผ่านทาง Apache CGI
อันนี้จะช้าหน่อย แต่เหมาะแก่การ test deploy ครั้งแรก
เพราะจะได้ check พวก configuration, permission
ให้ถูกต้องก่อน - ผ่านทาง Apache + mod_fastcgi
ที่เราจะทดลองก็คือ ใช้ FastCGI
เริ่มแรก ก็ต้อง install mod_fastcgi ก่อน
ขั้นนี้ไม่ยุ่งยากอะไร ก็แค่ download source code มา แล้วก็ build
จากนั้นก็ install fcgi developer kit
(ruby fcgi ต้องการใช้)
สุดท้ายก็ install ruby-fcgi
ส่วนการ deploy rails application
ถ้าอย่างง่าย ก็เพียงแต่ทำ link จาก htdocs
ไปยัง directory
project/public
จากนั้นก็ config Directory ที่เราทำ link ไว้
โดย enable ให้สามารถ run cgi ได้
<Directory "/Library/WebServer/Documents/snn">
Options +ExecCGI FollowSymLinks
AllowOverride all
Allow from all
Order allow,deny
</Directory>
จากนั้นก็เข้าไปแก้ไข file .htaccess ที่อยู่ใน directory
project/public
(file นี้ rails generate ให้เราอัตโนมัติ)
แก้ไข ส่วน rewrite rule จากของเดิมที่ใช้ dispatch.cgi
ไปเป็น dispatch.fcgi แทน
ปรับส่วน rewrite rule ให้เหมาะสมกับ structure ใหม่ของเราด้วย
(ขั้นนี้แหล่ะที่ค่อนข้างมั่ว เพราะเจ้า apache rewrite มันช่าง
เข้าใจยากจริงๆ)
เข้าไปแก้ไข
projectdir/public/dispatch.fcgi
ระบุ directory ของ log file ที่ต้องการ
RailsFCGIHandler.process! '/tmp/snippet_fcgi_crash.log'
เมื่อเราเรียกใช้ครั้งแรกสุด apache จะ start process dispatch.fcgi ให้อัตโนมัติ
แต่บางทีเราต้องการให้ start process ขึ้นมารอเลย
(เพื่อไม่ให้เกิดอาการ lag เมื่อ user เริ่มเข้ามาใช้)
ในกรณีนี้ ก็ให้เพิ่ม directive นี้เข้าไปใน httpd.conf
<IfModule mod_fastcgi.c>
FastCgiIpcDir /tmp/fcgi_ipc
FastCgiServer /Library/WebServer/Documents/snn/dispatch.fcgi \
-initial-env RAILS_ENV=production -processes 15 -idle-timeout 60
</IfModule>
No comments:
Post a Comment