แสดงบทความที่มีป้ายกำกับ ruby on rails แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ ruby on rails แสดงบทความทั้งหมด

วันพุธที่ 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 เดียวกันเลย)

วันอังคารที่ 7 ธันวาคม พ.ศ. 2553

รัน Ruby on Rails App ไม่ขึ้น Error ประมาณนี้

/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- iconv (LoadError)
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'


- ถ้ามีการลงเครื่อง Server ใหม่แล้ว รัน Ruby on Rails App ไม่ขึ้น Error ประมาณนี้ น่าจะเป็นปัญหาจาก Iconv ที่ยังไม่ได้มีการติดตั้งนั่นเอง
- หรือ บางที่อาจจะเป็น แค่ ruby-iconv ยังไม่ได้ติดตั้ง
- ดังนั้น ถ้าแก้ปัญหาบน FreeBSD ด้วย ports ก็ง่ายมากเพราะ มัน list software ที่ depend ให้หมดแล้ว


ruby-iconv: /usr/ports/converters/ruby-iconv
[root@nginx81 ~]# cd /usr/ports/converters/ruby-iconv/
[root@nginx81 /usr/ports/converters/ruby-iconv]# make install clean

วันเสาร์ที่ 27 พฤศจิกายน พ.ศ. 2553

Rails + Nginx Setup ตอนที่ 2

ต่อจากคราวที่แล้วนะครับ ใครที่อยู่ดีๆ เปิดมาเจอตอนที่ 2 ให้กลับไปอ่านตอนที่ 1 ก่อน

เปิดไฟล์ /usr/local/etc/nginx/nginx.conf เพื่อเอา commentออก ตรงในส่วนของการเรียกใช้งาน php

เพิ่ม index.php เข้าไป

location / {
root /usr/local/www/nginx;
index index.html index.php index.htm;
}


เอา comment ออก เพื่อให้เรียกใช้งาน php ผ่าน fcgi

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME โฟลเดอร์ที่เก็บไฟล์$fastcgi_script_name;
include fastcgi_params;
}

เซฟไฟล์ให้เรียบร้อย จากนั้น ไปสร้างไฟล์ทดสอบการทำงานของ php ที่ /usr/local/www/nginx/ สร้างไฟล์ index.php ควรจะได้ผลลัพธ์ของ phpinfo.

phpinfo();
?>


ปล.
ถ้า ขึ้น error No input file specified. -> ให้ย้อนกลับไปดูว่า โฟลเดอร์ที่เก็บไฟล์ อ่ะ ตรงกับที่ ใส่ไปใน nginx.conf หรือเปล่า ?

เอ้าไปๆ มา ตอนนี้ก็เป็นเพียง การ config nginx ให้ใช้งาน php ได้เท่านั้น ยังไม่เกี่ยวกะ Rails เลย เอาเป็นว่าที่เหลือเอาไว้ตอนหน้าแล้วกัน

---ยังไม่จบ มีต่อ ตอนที่ 3---

วันศุกร์ที่ 26 พฤศจิกายน พ.ศ. 2553

Rails + Nginx Setup ตอนที่ 1

โจทย์
1. อยากจะได้เครื่อง ที่ deplyment สำหรับ Ruby on Rails
2. ไม่เอา Apache เป็น เว็บเซิฟเวอร์
3. ถ้าจะให้ดี ต้องเพื่อใช้งาน php ด้วย


# cd /usr/ports/lang/ruby18
# make install clean
# cd /usr/ports/www/nginx
# make install clean

(ตอนเลือก คอนฟิกให้เลือก http_uploadprogress, passenger ด้วย)

# cd /usr/ports/databases/
# cd mysql51-server/
# make WITH_CHARSET=tis620 WITH_XCHARSET=all WITH_COLLATION=tis620_thai_ci WITH_OPENSSL=yes install clean
# gem install rails -v=2.3.5
# gem install mysql
# gem install mini_magick
# gem install mongrel_cluster

อันนี้เป็นส่วน option เพิ่มเติม , ลงphp, และการทำให้ nginx เรียกใช้งาน php ได้
# cd /usr/ports/lang/php5
# make install clean
# cd /usr/ports/lang/php5-extensions
# make install clean

ติดตั้ง spawn-fcgi (สมัยก่อน spawn-fcgi จะไม่แยกออกมาเป็น ports เฉพาะ จะอยู่รวมกับ lighttpd ก็ให้ติด lighttpd ก่อนแล้วค่อย copy เอาเฉพาะ spawn-fcgi แต่ถ้าอัพเดต ports เป็นล่าสุด มันจะแยก ports เรียบร้อยแล้ว)

# cd /usr/ports/www/spawn-fcgi/
# make install clean

- เปิดการใช้งาน spawn-fcgi และ รัน service ทุกครั้งที่ reboot
แก้ไขไฟล์ rc.conf และ เพิ่มคำสั่งนี้เข้าไป
spawn_fcgi_enable="YES"

ลอง Restart ดู จากนั้น ทดสอบ จะได้ ผลลัพธ์ประมาณนี้
# sockstat -4 | less

www php-cgi 687 0 tcp4 127.0.0.1:9000 *:*
www php-cgi 686 0 tcp4 127.0.0.1:9000 *:*
www php-cgi 685 0 tcp4 127.0.0.1:9000 *:*
www php-cgi 684 0 tcp4 127.0.0.1:9000 *:*
www php-cgi 683 0 tcp4 127.0.0.1:9000 *:*
www php-cgi 682 0 tcp4 127.0.0.1:9000 *:*

กลับมาเข้าสู้การทำงานหลัก
- เปิดการใช้งาน nginx และ รัน service ทุกครั้งที่ reboot
แก้ไขไฟล์ rc.conf และ เพิ่มคำสั่งนี้เข้าไป
nginx_enable="YES"

---ที่เหลือ อ่านต่อตอนหน้า---

วันอังคารที่ 16 พฤศจิกายน พ.ศ. 2553

Error เวลาเรียกใช้ I18n.localize ตลอด

Error เวลาเรียกใช้ I18n.localize ตลอด นั่นเป็นเพราะ มันไปเรียกใช้ gem i18n เอามันออกซะ อาการนี้ก็จะหายไป

Erroe ประมาณนี้
missing interpolation argument in "%a, %{count} %b %Y %H:%M:%S %z" ({:object=>Mon, 13 Sep 2010 21:09:21 UTC +00:00} given)

เอามันออกโดยใช้คำสั่ง

#gem uninstall -v 0.4.1 i18n


แต่ว่า ตัวที่มันใช้ i18n ก็คือ Rails 3.0 นะถ้ามี App ที่ใช้ Rails 3.0 อยู่อาจจะ error ได้ (ผมไม่ได้ใช้ แต่ เคยกดล Rails 3.0 ดังนั้น gem i18n จึงติดมาด้วย)

วันจันทร์ที่ 15 พฤศจิกายน พ.ศ. 2553

Rails 2.3.5 การเปลี่ยน Date format

ปัญหาคือ เวลาเราต้องการแสดงวันที่ ใน Rails view นั้น มันจะ ประหลาดๆ อย่างนี้

Mon Nov 15 14:36:43 +0700 2010

ทั้งๆที่ใจเรา ไม่อยากได้อย่างนี้ (อยากได้ แบบแสดงวันที่ เป็นภาษาไทยเลย) แล้วเราจะเปลี่ยนรูปแบบของมันได้ไหม ? วันนี้เอาวิธีเปลี่ยนแบบง่ายๆมาก่อน คือ เปลี่ยนรูปแบบการแสดงผลก่อน ส่วนภาษาไทยเอาไว้คราวหน้า

สร้างไฟล์ใหม่ my_time_format.rb ในโฟลเดอร์ /config/initializers


ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!({
:quick => "%m %d, %Y at %I:%M %p",
:simple => "%A %B %d, %Y",
:end_date => "%B %d, %Y"
})


จากนั้น ทดสอบ ดูใน ./scripts/console


[nutjang@bsd-1279 ~/rails/demo_app]$ ./script/console
Loading development environment (Rails 2.3.5)
>> Time.now
=> Mon Nov 15 14:36:43 +0700 2010
>> Time.now.to_s(:simple)
=> "Monday November 15, 2010"
>> Time.now.to_s(:end_date)
=> "November 15, 2010"
>>


จบ.

วันเสาร์ที่ 6 พฤศจิกายน พ.ศ. 2553

บันทึก Note ของ Rails Project

เมื่อโปรเจค Rails มันใหญ่ขึ้น แล้วตรวจสอบพบว่า มีจุดบกพร่องแต่ก็ยังไม่อยากแก้ตอนนี้ (ไม่ว่าจะด้วยสาเหตุใดก็ตาม) แต่ก็ต้อง Note ไว้ก่อน

หรือ ในกรณีที่คล้ายๆกัน ระหว่างที่เขียนโปรแกรมไปเรื่อยๆ นึง Feature ใหม่ๆ ขึ้นมาได้ แล้วก็อยากจะ Note ไว้ก่อนแล้วค่อยมาทำทีหลัง

แล้วพอ comment ไปเยอะๆเข้า หรือ ปล่อยไว้นานๆ ก็ยังไม่เข้าไปแก้ไข จนลืม (ต้องคอยมานั่งเปิดไฟล์ เพื่อหาตำแหน่ง ที่ comment ไว้)

ปัญหาเหล่านี้ Rails มีคำสั่งให้แล้วครับ อยู่ใน rake notes (ถ้าอยากดูว่า rake มีคำสั่งทั้งหมดใช้ rake -T)

โดยมีรายละเอียดดังนี้

rake notes # Enumerate all annotations
rake notes:custom # Enumerate a custom annotation, specify with ANNOTATION=WTFHAX
rake notes:fixme # Enumerate all FIXME annotations
rake notes:optimize # Enumerate all OPTIMIZE annotations
rake notes:todo # Enumerate all TODO annotations


ตัวอย่างการใช้งาน ในไฟล์ controller
def create
# TODO: need to implement
end

จากนั้นให้ออกมาที่ command ของ linux แล้วลองพิมพ์คำสั่ง

# rake notes
หรือ
# rake notes:todo

ทีนี้พอเราทำงานไปเรื่อยๆ ถ้าเจออะไรผิดพลาด หรือ ต้องย้อนกลับมาทำในภายหลังก็ให้ comment เอาไว้ก่อน แล้สพอว่างๆก็ใช้คำสั่ง rake เรียกกลับมาดูได้แล้วนะครับ

วันพุธที่ 3 พฤศจิกายน พ.ศ. 2553

อยากกลับไปใช้ Rails version ที่เก่ากว่าปัจจุบัน

เป็นเรื่องปกติครับที่ โปรแกรมจะมีการอัพเดตเวอร์ชั่นใหม่ๆ แต่ทีนี้ บางทีของใหม่ๆ มันก็ยังมีปัญหาอยู่ ก็เลยคิดว่าใช้ของเก่าไปก่อนก็แล้วกัน ไว้พอเวอร์ชั่นใหม่นิ่งๆเมื่อไรก็ค่อยย้าย

ตอนนี้ Ruby on rails มันออกเวอร์ชั่น 3.0.2 เข้าไปแล้ว แต่ในความเห็นของผม็คือมันยังไม่นิ่ง และที่สำคัญ gem บางตัวมันก็ยังไม่ support ดังนั้นถ้าจะ สร้าง rails app ใหม่ๆ ก็คงต้องใช้ version เก่าไปก่อน

- Rails 2.3 ปัจจุยันมันก็ไปที่ 2.3.10 แล้ว ก็ยังไม่ถูกใจอีก อยากจะใช้ 2.3.5
- ลง FreeBSD ใหม่ พอกดลงโปรแกรมมันก็ install เวอร์ชั่นล่าสุดให้อย่างเดียว

ก็เลยหาคำตอบสำหรับคนที่อยากจะใช้เวอร์ชั่นที่เก่ากว่าปัจจุบันมาให้ครับ โดยใช้คำสั่งง่ายๆ ดังนี้

# gem install rails <- มันจะติดเวอร์ชั่นล่าสุดให้ตลอด
# gem install rails -v=2.3.5 <- ใช้คำสั่งนี้ มันจะติดเวอร์ชั่น 2.3.5 ให้

เวลาจะ สร้างโปรเจคใหม่ ในเครื่องที่มันมี rails หลายๆเวอร์ชั่น

# rails new_project <- มันเลือก เวอร์ชั่นล่าสุดให้ อัตโนมัติ
# rails _2.3.5_ new_project <- สร้างตามเวอร์ชั่นที่เราเลือก

สรุป ใครอยากจะใช้เวอร์ชั่นใหนก็ใช้คำสั่งให้ถูกต้องก็แล้วกันครับผม

วันเสาร์ที่ 9 ตุลาคม พ.ศ. 2553

Rails Rake Task + Cron Job

ทำงานไปด้วย Rails ซักพักนึงแล้ว คิดไหมว่า บางครั้งก็ต้องมีการรัน job schedule เรื่อยๆ เพื่อปรับปรุงเว็บไซต์

ตัวอย่างเช่น การปรับปรุง search index ของ xapian ถ้าจะ update กันด้วย rake command ก็จะเป็นดังนี้

# cd /path/to/rails_apps/
# rake xapian update_index RAILS_ENV=production

ทีนี้ข้อมูลต้องมีการอัพเดตเรื่อยๆ แล้ว เราจะมานั่งพิมพ์ command เพื่ออัพเดตเองตลอดได้ยังไง วันนี้มีทางออกแล้วครับ

คำตอบก็คือ cron job ที่เรารู้จักกันดีอยู่แล้วนี่เอง ที่เราไม่ค่อยเห็น บทความการใช้งาน rake กับ cron job มากนักก็อาจเป็นเพราะว่า มันมีทริกนิดนึง ก็คือ เรื่องของ PATH ครับ กล่าวคือ ต้องใส่ path เต็มๆของ rake

path เต็มๆ ของ rake หาได้จากคำสั่งนี้
# whereis rake

แล้วในการเรียกใช้งาน rake เราก็ต้องตั้งค่า directory เริ่มต้นให้ถูกต้องด้วยนั่นเอง
# cd /path/to/rails_apps/

สรุป ก็จะได้คำสั่งสำหรับ run cronjob ดังนี้ (สั่งให้ทำงานทุกๆ 45 นาที)

45 * * * * cd /home/nutjang/rails && /usr/local/bin/rake xapian:update_index RAILS_ENV=production

วันอาทิตย์ที่ 26 กันยายน พ.ศ. 2553

ปรับ Rails เป็น 2.3.9 เข้าใกล้ 3.0 เข้าไปทุกทีๆ

อืม Rails 3.0 ใกล้จะออกตัว Release เข้าไปทุกทีแล้ว ดังนั้น คาดว่าในอนาคตจะต้องมีการปรับเวอร์ชั่นของ jjthai ให้เป็น Rails 3.0 แน่นอน ดังนั้นก่อนที่จะปรับเป็น 3.0 ก็ปรับความเตรียมพร้อมให้เข้าใกล้ (เพราะว่าเวอร์ชั่น 2.3.9 จะมีคำเตือน deplicate เยอะ) ก็ลองดูปรับดู เพราะเท่าที่ตรวจสอบแล้ว ไม่ได้มีการปรับแก้ code เลย มีแต่การปรับ version gem ซะมากกว่า

ก่อนอื่นก็ อัพเดต gem
# gem update --system

จากนั้น เพื่อความชัวร์ นะ อยากจะใช้ Rails 2.3.9 ก็ติดตั้ง เข้าไปซะเลย
# gem install rails --version=2.3.9

หลังจากรัน Rails 2.3.9 มีคำเตือนขึ้นมา เกี่ยวกับ config.load_paths ก็แก้ซะ ตามนี้

# Rails 2.3.x deplicated
#config.load_paths += %W( #{RAILS_ROOT}/app/sweepers )
# support Rails 2.3.x and Rails 3.x
config.autoload_paths += %W( #{RAILS_ROOT}/app/sweepers )

ตอนนี้กำลังทดสอบ Rails อยู่ตอนนี้ยังไม่พบปัญหาจ้า

วันอังคารที่ 14 กันยายน พ.ศ. 2553

ว่าด้วยเรื่อง subdomain ใน ruby on rails

อยากจะแจก subdomain ให้ user แต่ละคนไหม ?

ตัวอย่างเช่น เรามี user 2 คน มาเปิดร้านค้าย่อยที่ jjthai.net

user starwar1 ก็จะได้ URL ร้านค้าเป็น starwar1.jjthai.net
user starwar2 ก็จะได้ URL ร้านค้าเป็น starwar2.jjthai.net

อ่านนี่ซะ จะได้ทำเป็น

http://s2.diffuse.it/blog/show/49-Subdomain_routing_with_rails

ถ้าอยากอ่านเป็นภาษาไทยก็รอไปก่อน

1 Rails App สำหรับ หลายๆ โดเมน

โอ้วๆ หามานาน เรื่องมันมีอยู่ว่า นานมาแล้ว นั่งทำเว็บไซต์ด้วย Rails มาตั้งนาน เสร็จแล้วก็ออกแบบ ซะดิบดี ได้ออกมาเป็นเว็บหน้าตาดี 1 อัน ทีนี้ อยากได้เว็บที่มันใช้ Engine เดียวกันนี่เหละ แต่รายละเอียดมันต่างกันออกไปนิดนึง (อย่างเช่น layout ไม่เหมือนกัน) แต่ส่วนใหญ่ ใช้แนวคิดเดิมๆ ถ้าแยก Rails App กันซะ มันก็หมดเรื่อง แต่มันก็ ต้องแก้ bug ทั้ง 2 อัน

แล้วจะทำไงดีหล่ะ อยากจะรับจ้างทำเว็บไซต์ แต่ใครจะมานั่ง deploy & Bug fix ทุกๆอัน ก็เลยออกมาเป็น solution ดังนี้

1. ใช้ทริ๊กของ Rails Route โดยปรับให้รับเงื่อนไข เรื่อง request.host, request.domain เพิ่มเติมเข้ามา
2. จากนั้น สร้างเป็นไฟล์ เพื่อเข้าไปใน /config/initializers (ชื่อไฟล์อะไรก็ได้)

จากนั้นก็ลองทดสอบดูดิ ว่า ถ้า request host มาหลายๆแบบ แล้ว route ไปคนละ ทาง

# /config/initializers/multiple_domain_route.rb ################################

#
# This allows us to set up custom routes that depend on the domain or host of the request, ie:
# map.connect '', :controller => 'blah', :action => 'blah', :conditions => {:domain => 'blah'}
#

module ActionController
module Routing
class RouteSet
def extract_request_environment(request)
env = { :method => request.method }
env[:domain] = request.domain if request.domain
env[:host] = request.host if request.host
env
end
end
class Route
alias_method :old_recognition_conditions, :recognition_conditions
def recognition_conditions
result = old_recognition_conditions
result << "conditions[:domain] === env[:domain]" if conditions[:domain]
result << "conditions[:host] === env[:host]" if conditions[:host]
result
end
end
end
end

############################################################

# /cofig/route.rb ###############################################

ActionController::Routing::Routes.draw do |map|

map.connect '/', :controller => 'nutjang2', :action => 'index', :conditions=>{ :host=>'www.nutjang2.com' }
map.connect '/', :controller => 'nutjang3', :action => 'index', :conditions=>{ :host=>'www.nutjang3.com' }

map.root :controller => "welcome"

map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end

############################################################

วิธีการทดสอบบน windows ที่จะชี้ไปว่าเป็น หลายๆ โดเมนก็ง่ายแสนง่าย c:/windows/system32/driver/etc/hosts

เพิ่มบรรทัดพวกนี้เข้าไป แล้วลองเปิด browser เรียก www.nutjang2.com, www.nutjang3.com ดู แล้วเทียบกับ log ของ Rails ว่า มัน route ถูกไหม

192.168.1.201 www.nutjang2.com
192.168.1.201 www.nutjang3.com

วันจันทร์ที่ 13 กันยายน พ.ศ. 2553

เพิ่มประสิทธิภาพของ Rails ด้วย Nginx + Gzip

ไม่พูดพล่ามทำเพลง คือ พอใช้งาน google webmaster มันบอกว่าเว็บเราโหลดช้าไป โดบให้คำแนะนำมาว่า ให้ใช้ module gzip ไฟล์ text ต่างๆ อืม... พอมานั่งคิดๆดู มันจริงนะ เพราะ browser + cpu สมัยนี้ ใช้แตก gzip หน้าเว็บเนี่ยเป็บเดียวเอง แล้วมันก็เป็นการประหยัด bandwidth ในการเชื่อมต่อเน็ตด้วย (ทำให้โหลดเร็วขึ้นอย่างเห็นได้ชัด) ok ว่าไงว่าตามกัน เพิ่ม config ข้างใต้นี้เข้าไปใน nginx.conf แค่นั้นเอง จากนั้นก็ restart service nginx ทีนึง จบ.

# output compression saves bandwidth
gzip on;
gzip_buffers 16 8k;
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_proxied any;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/css;

วันเสาร์ที่ 3 กรกฎาคม พ.ศ. 2553

jQuery + Rails = สูตรสำเร็จ

หลังจากที่ แชมป์ ชอบออกมาเชียร์ jQuery กับ Ruby on Rails ว่าใช้แล้วดี ชอบมากๆ เราก็เลยแอบมาอ่านหนังสือเกี่ยวกับ jQuery ซะ เพราะถ้ามันดีจริง เราก็น่าจะเอามาประยุกต์ใช้กับเว็บไซต์ของเราได้เหมือนกัน โดยจุดหลักๆที่เรา คาดว่าจะเอา jQuery มาเติมเต็มก็คือ

1. การเพิ่มประสบการณ์ของผู้ใช้งานให้สูงขึ้น (เช่นการลงประกาศขายสินค้า, หน้าค้นหาสินค้า และ สมาชิก)
2. เพื่อเป็นการเพิ่มประสิทธิภาพของ เซิฟเวอร์ โดยการใช้ page_cache + dynamic data (by jQuery)

ส่วนเรื่อง jQuery UI นั้นคงยังไม่นำมาใช้เพราะ ต้องขอเวลาศึกษาอีกนิด ก่อนที่จะนำมาใช้งานจริง

วันศุกร์ที่ 25 มิถุนายน พ.ศ. 2553

การใช้งาน rails link_to แล้วให้ ลิงค์ไปยังหน้าต่างใหม่

มีอยู่ 2 วิธีนะครับ ลองเอาไปใช้กันดูได้

link_to 'nutjang blog', "http://nutjang.blogspot.com", :target => '_blank'

link_to "nutjang popup", { :action => "busy" }, :popup => ['new_window','height=300,width=600']

วันศุกร์ที่ 11 มิถุนายน พ.ศ. 2553

การใช้งาน Rack ในแบบ test, production

ตามปกติเวลาเราใช้คำสั่ง rake ใน Rails ก็มักจะใช้คำสั่งห้วนๆ ตัวอย่างเช่น rake สร้าง database หรือ การ migrate database

$ rake db:create

$ rake db:migrate

ซึ่งคำสั่งดังกล่าวก็จะสร้างให้กับ Environment development เพียงอย่างเดียว ทีนี้ก็เกิดคำถามว่า ถ้าเราต้องการทำใน Environment อื่นๆ เช่น test , production จะทำยังไง ?

วิธีแก้ไขง่ายๆ ก็คือ การเพิ่มตัวแปร RAILS_ENV=environment เข้าไป ด้งตัวอย่างต่อไปนี้

$ rake db:create RAILS_ENV=production

$ rake db:migrate RAILS_ENV=production

ซึ่งก็คือการสร้าง Database และ การ Migrate Database ให้กับ Rails ภายใน Environment Production นั่นเองครับ

วันเสาร์ที่ 6 กุมภาพันธ์ พ.ศ. 2553

Rails 3.0 จะออกแล้วจ้า

เห็นข้อความจากทาง Twitter แล้ว บอกว่า Rail 3.0 จะออกตัวจริงๆเร็วๆนี้ (ตอนนี้ยังเป็น beta อยู่) งานนี้ไม่ใช่ไม่ชอบนะ อยากใช้ Rails 3.0 อยู่เหมือนกัน แต่ไม่รู้ว่า Apps ที่ใช้อยู่จะ Migrate ขึ้นไปยังไงหล่ะ เห็น screen cast แล้ว มีแก้ไขอยุ่หลายจุดเลย