วันเสาร์ที่ 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"
>>


จบ.

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

ระลอก 2 ของ Google

ระลอก 2 ของ Google Update มาอีกแล้ว คราวนี้ ปรับปรุงในส่วนของการ Preview เว็บไซต์ แค่เอาเมาส์ไปวางเบาๆ ก็มี Preview โผล่ขึ้นมาทันที

สำหรับคนท่องเว็บคงคิดว่านี่ มันสะดวกสบายจริงๆ ที่ดูรูปคร่าวๆ ก่อนที่จะคลิ๊กได้ เว็บไหนที่โดนใจก็ค่อยคลิ๊กเข้าไปดู เว็บไหนไม่ถูกใจก็ไม่ต้องไปคลิ๊กมัน



การอัพเดตลักษณะนี้ สามารถคาดการณ์คร่าวๆได้ ว่า จะมี ผลกระทบอะไรกับ Google
1. คนจะอยู่ในเว็บไซต์ของ Google นานขึ้น (เพราะไม่ต้องคลิ๊กเพื่อออกไปดูผลลัพธ์ พี่ Google ทำ preview มาให้เสร็จ)
2. ผู้ใดที่ทำหน้าให้ Google เห็นอย่างนึง ลูกค้าเห็นอีกอย่างนึง ระวัง Google จะเอาหน้า ประหลาดๆ มาเป็น preview
3. Google สามารถต่อยอดได้อีก ประมาณ 2 - 3 step (ประมาณว่า ฉลาดได้กว่านี้)
4. Adsense เยอะขึ้น เพราะ คนอยู่ใน Google นานขึ้น เลยมีโอกาสแสดงโฆษณาได้เยอะขึ้น (โอ้วนี่หล่ะประเด็น)
5. ฯลฯ



แล้วสำหรับคนทำเว็บหล่ะ จะมีมุมมองยังไง ? การที่มี Preview จะกระทบกับเว็บไซต์ของเราหรือเปล่า ?

วันเสาร์ที่ 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 <- สร้างตามเวอร์ชั่นที่เราเลือก

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

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

Google กับ Door way website

คาดว่าเป็นที่แน่นอนแล้วสำหรับการปรับปรุง Algorithm ของ Google ที่มีผลกับเว็บไซต์ ที่ Google พิจารณาว่าเป็นประเภท doorway มากขึ้น, เห็นหลายๆเว็บไซต์ ก็เริ่มมีสถิติ ทยอยปรับลดกันอย่างต่อเนื่อง :(

ดังนั้น การทำเว็บไซต์ที่ รายได้ ผันตรงกับ จำนวนผู้เยี่ยมชมที่มาจาก Google เพียงอย่างเดียวจึงไม่น่าจะปลอดภัย

ทั้งนี้เพราะสำหรับเมืองไทย Google เกือบๆจะ = internet แล้วจะทำอะไรก็ต้องไปผ่าน Google ยิ่งตอนนี้อ่านข่าวเจอว่า Google เปิดบริการใหม่ Local Place Search

**อันนี้เ็ป็นความคิดเห็นส่วนตัว **
search keyword 'ร้านค้า เยาวราช' ก็จะแสดงผลร้านค้าในย่ายเยาวราช ออกมา (โอ้วแม่เจ้า) <- อีกหน่อย เว็บรวมร้านอาหาร ก็จะตายไป เพราะ ไม่มีคนเข้า

search keyword 'โรงแรม หัวหิน' ก็จะแสดง โรงแรมในย่าน หัวหิน <- อีกหน่อย เว็บรวมโรงแรม ก็จะตายไป เพราะ ไม่มีคนเข้า

เพราะ Google อยากได้ ค่าโฆษณา ใครที่เป็นเว็บทางผ่าน แล้วหาค่าโฆษณากิน อยู่ยากครับ เพราะ อีกหน่อย Google คงจะแทนที่คุณ แล้วทยอยหนีไปลงโฆษณา Adword กันเพราะ ทันทีที่จ่ายเงินเศษสตางค์ ก็อยู่เหนือ คนที่ SEO เก่งที่สุดแล้ว

แต่จะมี หลายๆกลุ่มที่มีผลกระทบไม่มากนัก (เท่าที่สำรวจมามีเพียงไม่กี่กลุ่มเท่านั้นจริงๆ) ดังนั้น เพื่อเป็นการป้องกันการถูก de-index จาก Google ทั้งหมดก็คงต้องมีการปรับแผนกันบ้าง

แล้วคุณหล่ะ จะรับมือกับ Google ในยกนี้ยังไง ?