Ruby on Rails :: Get Something Running
Posted by PunNeng, Wed Jul 12 22:35:00 UTC 2006
ได้ฤกษ์เริ่มกันสักที มาดูกันก่อนว่าคราวนี้จะทำอะไรบ้าง หลังจากที่สร้าง project แล้ว
- สร้างตารางในฐานข้อมูลก่อน ไว้เก็บ post ของเรา
- จัดการ Database configuration
- สร้างส่วนจัดการสำหรับ post
อันดับแรกก็ต้องไปสร้างกันก่อน ยังได้ได้เป่าหว่า ถ้าใน windows จะใช้ dos แต่ใน ubuntu ก็บน terminal นี่แหละ
simple_blog>rails simple_blogหลังจากนั้นมันจะสร้าง project ให้เรามาก้อนนึง จากนั้นไปที่ project ของเราแล้วไปเปิด server น้อยๆ ของเราก่อน
simple_blog>ruby script/server => Booting WEBrick... => Rails application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2006-07-11 13:53:36] INFO WEBrick 1.3.1 [2006-07-11 13:53:36] INFO ruby 1.8.4 (2005-12-24) [i486-linux] [2006-07-11 13:53:36] INFO WEBrick::HTTPServer#start: pid=8032 port=3000
ต่อไป เราจะต้องที่ที่ไว้เก็บ post ของเรา ไปสร้างที่เก็บกันก่อนดีกว่า
Create the Database
ไปที่ mysql กันเลย(ใครถนัดอันไหน ก็ใช้อันนั้นนะครับ) สร้างฐานข้อมูลมาสามตัว
simple_blog_development simple_blog_production(ยังไม่ต้องสร้างก็ได้)
simple_blog_test
simple_blog_development จะเป็นฐานข้อมูลสำหรับการพัฒนา ตัว code ของเราที่จะสร้าง ตอนนี้จะถูกต่อมายังตัวนี้
simple_blog_production จะเป็นฐานข้อมูลสำหรับใช้จริงๆ เมื่อเราพัฒนางานของเราเสร็จแล้ว
simpleblogtest จะเป็นฐานข้อมูลสำหรับการ test มันจะถูกล้างทั้งหมด แล้วสร้างขึ้นมาใหม่ ทุกๆ ครั้งที่มีการ test แต่เราก็สั่งได้ จะให้ล้างหรือไม่ล้าง (มีความแปลกอยู่ จะอธิบายอีกทีถ้าถึงเรื่อง test)
แล้วตามด้วย
export มาจาก phpmyadmin สำหรับ created_by กับ updated_by เดี๋ยวค่อยย้อนกลับมาแก้ไขมันอีกที
ตารางนี้ มีไว้เก็บของพื้นๆ ที่ blog ควรจะมี เช่น title หรือ body ไม่อธิบายมาก เพราะชื่อมันค่อนข้างสื่ออยู่แล้ว
ต่อไป จะเป็นส่วนของการ configure database
Configure the Applicaion
ถ้าใช้ php ต่อกับฐานข้อมูล เคยนับหรือเปล่าครับ ว่า connect() ไปกี่หน (สำหรับอีกทางเลือกหนึ่งของ php ไว้จะมา review cakephp ละกัน) ใน code ของเรา การ connect จะต้องใส่ username กับ password ลงไปด้วย แต่ถ้าหาก server configuration เราเกิดบ๊องๆ ขึ้นมา โอกาสที่ password จะโผล่มา hello world ก็มีแน่
ถ้าเราจะใช้การ test เราคงต้องพิมพ์ db url ใหม่ ถูกมะ เพราะเราคงไม่ใช่ฐานข้อมูลสำหรับ dev กับ test เป็นตัวเดียวกันแน่ๆ พอจะกลับมา dev อีก ก็ต้องพิมพ์ใส่ใหม่อีก ไม่ดีมั้ง
พวกนักพัฒนาที่เจ๋งๆ จะแยกส่วน configure พวกนี้ออกไปจาก code เลย บางทีอาจจะต้องใช้ที่เก็บเยอะขึ้น ถ้ามันมีจำนวนเยอะขึ้น (สำหรับพวกที่ทำ java จะใช้ JNDI ในการหาส่วนที่ที่เราแยกไว้) ซึ่งมันจะดูหนักไปนิด สำหรับงานทั่วๆ ไป แต่สำหรับ Rails จะใช้ file น้อยๆ ตัวนึง ลองเข้าไปดูได้ใน config/database.yml1
จากนั้น แก้ไขตามนี้เลย
ในส่วนนี้จะมีอะไรยุ่งยากนิดหน่อย คือ ถ้าเราทำบน linux ซึ่งมันพัฒนามาจาก unix ธรรมชาติของ unix ถ้าเราต่อกับ localhost มันจะพยายามติดต่อทาง socket เราจึงต้องระบุ socket ให้มันด้วย ซึ่งตัว .sock ที่ผมใช้นี้ เป็นของ lampp มันจะอยู่ตาม path ที่ใส่ไป สำหรับค่ายอื่น ถ้าหาตัว .sock นี้ไม่เจอ หน้าตา error ที่มันจะเกิดขึ้น จะเป็นแบบนี้

วิธีแก้คือ ให้ระบุเป็น ip แทน คือ 127.0.0.1 มันจะถูกบังคับให้ติดต่อกันผ่าน TCP/IP
แต่ถ้าเป็น windows สบายๆ เลยครับ ไม่มีปัญหาอะไร
Create Maintenance Application
ก็มาถึงส่วนที่สร้างการจัดการสักที เริ่มกันที่
simple_blog>./script/generate scaffold post admin
exists app/controllers/
exists app/helpers/
exists app/views/admin
exists test/functional/
dependency model
exists app/models/
.
.
.
create app/helpers/admin_helper.rb
create app/views/layouts/admin.rhtml
create public/stylesheets/scaffold.css
อันนี้จะเป็นตัวจัดการง่ายๆ ให้เรา parameter ตัวแรกที่รับมาคือ post จะเป็นตัวบอก model และอีกตัวคือ admin คือตัวบอก controller ลองไปที่
http://localhost:3000/admin
ทีนี้ ใน list ของเรา มันยังว่างๆ อยู่ ไปใส่กันดีกว่า เริ่มที่ปุ่ม new post แล้วก็ใส่ข้อมูลตามใจเลย

หลังจากสร้างแล้วจะได้
มันมีปุ่มที่เหลืออยู่ คือ show edit และ destroy ก็ลองเล่นๆ ดูนะครับ
ถ้าสงสัยอะไร ให้ไปดู code ใน admin_controller.rb ดูได้ มันจะถูก generate โดย scaffold ตัว code ข้างใน จะค่อนข้างเข้าใจง่าย มันจะมีความสัมพันธ์กับฝั่ง view ลองเปิดเปรียบเทียบดู สำหรับตัว scaffold จะเป็นตัว generator สร้าง code ให้เราอย่างที่ผมทำขึ้นมา ลองสังเกตดูมันจะเป็น function ที่เป็นพื้นฐานสำหรับฝั่ง admin ทั่วๆ ไป มันจะ map กับฐานข้อมูลให้โดยอัติโนมัติ
1 ตัว .yml ย่อมาจาก YAML ซึ่งมันไม่ใช่ markup language มันมีหน้าที่ไว้เก็บอะไรบางอย่างใน file เล็กๆ (แต่มันไม่เหมือน xml นะ) ซึ่ง Ruby ก็สนับสนุนเจ้า YAML นี้อยู่แล้ว(built-in)
ปล. ยังไม่จบนะครับ คราวหน้ามาต่อกันด้วยการ validate ข้อมูลกันต่อ ปอ. สำหรับคนที่อยากจะ coding ใจเย็นๆ ครับ ได้เจอแน่นอน
แก้ไขล่าสุด วันที่ 7 กรกฏาคม 2550 เวลา 23.11 น.