Thursday, August 6, 2015

Auto restart node daemon: รีสตาร์ทเมื่อแก้ไขซอร์สโค้ด#1

Node.js เป็นเทคโนโลยีที่ยังใหม่อยู่ในขณะนี้ (6/8/2015) และยังเป็นเซิร์ฟเวอร์ที่ต้องรันเซอร์วิสของ node.js เมื่อมีการเปลี่ยนแปลงซอร์สโค้ดทุกครั้งต้องปิดเซอร์วิสแล้วค่อยเปิดใหม่

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

แต่สำหรับคนที่ทำระบบโดยไม่เข้าถึง Shell โดยตรงแล้วจะยากสำหรับการเข้าไปปิด-เปิด หรือ รีสตาร์ทเซอร์วิส แต่อย่างไรก็ตามใช่ว่าจะไร้หนทางเสียทีเดียวเมื่อมีคนเขียนโปรแกรมไว้รองรับเรียกว่า nodemon การติดตั้งก็ง่ายแสนง่ายรันผ่าน npm ได้เลย

npm install -g nodemon 

และการใช้งานก็เรียกแทน node.js ได้เลย
nodemon <app.js> 

คุณสมบัติของ nodemon

  • รีสตาร์ทโปรแกรมแบบอัตโนมัติเมื่อเปลี่ยนแปลงซอร์สโค้ด
  • ตรวจสอบไฟล์นามสกุลที่มอนิเตอร์อัตโนมัติ
  • สนับสนุน node และ coffeescript 
  • เฝ้าดูไดเรคทอรี่ที่ระบุ
  • เป็น Opensorce ดาวน์โหลดฟรีที่ github

การแก้ไขปัญหา

สำหรับคนที่ใช้ ubuntu เมื่อรัน node แล้วจะไม่พบไฟล์ ระบบจะแนะนำให้ติดตั้งโปรแกรมอื่นๆ ที่คาดว่าจะมีโปรแกรม node แต่ถ้ารัน nodejs จะสามารถใช้งานได้เช่นกัน ซึ่งบางคนติดรูปแบบการเรียน node มากกว่า มีวิธีแก้ไขโดยสร้างลิงค์ไฟล์ใหม่ คือ
sudo ln -s /usr/bin/nodejs /usr/local/bin/node
เพียงแค่นี้ก็จะเรียกใช้คำสั่ง node ได้แล้ว

เมื่อมีการแก้ไขที่หน้าจอ Console (ถ้ายังไม่ยกเลิกออกไปเสียก่อน) จะมีข้อความ
7 Aug 00:34:10 - [nodemon] restarting due to changes...
7 Aug 00:34:10 - [nodemon] starting `node ticket.js`
server start app onready
และเมื่อดูจากโพรเซสจะเห็นตัวเลขเปลี่ยนไป
14890 pts/0    00:00:00 node
15075 pts/0    00:00:00 node
root@tms:# nano ticket.js
root@tms:# ps -A | grep node
14890 pts/0    00:00:00 node
15183 pts/0    00:00:00 node
root@tms:# nano ticket.js
root@tms:# ps -A | grep node
14890 pts/0    00:00:00 node
15227 pts/0    00:00:00 node
root@tms:# nano ticket.js
root@tms:# ps -A | grep node
14890 pts/0    00:00:00 node
15283 pts/0    00:00:00 node

เท่าที่ทดสอบแล้ว nodemon ถือว่าเป็นโปรแกรมที่ช่วยอำนวยความสะดวกให้กับนักพัฒนาสาย JavaScripts ได้เป็นอย่างดี ไม่ต้องรีโมทบ่อยครั้ง เพียงแค่อัพโหลดไฟล์ผ่าน ftp ไปยังเซิร์ฟเวอร์ที่เหลือเป็นหน้าที่ของ nodemon รับช่วงต่อไป แต่อย่างไรก็ตาม หากอัพโหลดแล้วหากระบบไม่ทำงาน ให้ลองตรวจสอบคำสั่งอีกครั้งหนึ่ง บางครั้งคำสั่งที่แก้ไขนั่นแหละไม่ทำงาน เช่น ใช้คำสั่ง alert ในฝั่งเซิร์ฟเวอร์ซึ่งไม่สามารถใช้งานได้ เพราะฟังค์ชัน alert ไม่มีในสภาพแวดล้อมของ node.js แต่สามารถสั่งรันในฝั่ง client ได้ 

ปกติหากแก้ไขครั้งหนึ่งสั่งรัน node daemon กันครั้งหนึ่งก็ไม่มีปัญหาเพราะหากมีความผิดพลาดอะไรก็จะแสดงออกมาให้เห็นทันที แต่กรณีใช้ nodemon เราก็มองไม่เห็นเพราะอยู่บนฝั่งเซิร์ฟเวอร์ ดังนั้นควรที่จะตรวจสอบและระมัดระวังสักนิด...



No comments:

Post a Comment