[Trick] ทำ Heroku ให้ Active ตลอดเวลาด้วย Google Apps Script

Ingkwan
Ingkwan’s Knowledge Hub
2 min readApr 18, 2018

--

บทความวันนี้จะสั้นหน่อยนะคะ =) เนื่องจากนึกขึ้นได้ว่าตอนแชร์วิธีการ สร้าง Line Bot ด้วย Node.js ลืมใส่ทริคป้องกันไม่ให้ Heroku “หลับ” เพราะในช่วงที่มันหลับ เวลามี Request เข้ามาจะมี Delay เกิดขึ้น เพราะต้องใช้เวลาในการปลุกตัวเองให้ตื่นแล้วประมวลผล Request ต่อ

คือเวลาเรา Deploy Heroku app มันจะไปสร้าง VM Image ขึ้นมาตัวนึงเรียกว่า Slug แล้วพอเวลา VM Instance ถูกรันจาก Slug ตัวนี้ เราก็เรียกมันว่า Dynos ให้มองง่ายๆว่ามันก็เหมือนกับ Application Container ของ Heroku ซึ่งมีคุณสมบัติเด่นคือการ Scaling ซึ่งเราสามารถเพิ่มลดขนาดได้ตามใจชอบ จะ Manual หรือ Auto ก็ได้

นี่คือตัวอย่างของ Dyno ซึ่งเป็นประเภท Web Dyno

แล้วมันเกี่ยวอะไรกัน? ถ้าไปดูที่ https://www.heroku.com/pricing จะเห็นว่าเวอร์ชั่นฟรีกับเสียเงินมีส่วนนึงที่แตกต่างกัน นั่นคือถ้าตัวฟรีหลังจากที่ไม่มี Request เข้ามา 30 นาที เจ้า Dyno ก็จะอยู่ในสภาวะ Sleep

วิธีง่ายๆคือ ก็ยิง Request ไปหาทุกๆ 30 นาทีสิ

ข้อควรระวัง เนื่องจากเป็น Free Dyno จะมีจำกัดเวลาที่ใช้งานอยู่ รายละเอียดตาม https://devcenter.heroku.com/articles/free-dyno-hours โดยสามารถรันได้ 550 ชั่วโมงต่อเดือนเท่านั้น ถ้าเกินก็จะถูก Force ให้ Sleep จนกว่าจะเดือนใหม่

ดังนั้นเราควรกำหนดช่วงเวลาที่ส่ง Request ไปเพื่อไม่ให้ใช้จนหมด สมมติว่าเราอยากจะส่ง Request ไป Trigger เฉพาะช่วงเวลาเก้าโมงเช้าถึงสามทุ่มเท่านั้น

เริ่มต้นด้วย Google Sheets แล้วหาสิ่งที่เรียกว่า Script editor

ใส่โค้ดลงไปดังนี้ (อย่าลืมเปลี่ยน https://xxxxxx.herokuapp.com ให้เป็นของเราด้วย) และเพิ่มการบันทึกลงใน Spreadsheet ว่าส่ง Request ไปครั้งสุดท้ายเมื่อไหร่

จากนั้นเราจะมากำหนดว่าให้ส่ง Request ไปหาทุกๆ 30 นาที เลือกตามกรอบสีแดงจะเห็นว่ามี Pop-up โผล่ขึ้นมาก็ให้ใส่ไปตามรูปแล้วกด Save

ทดสอบว่า Script ถูกต้องหรือไม่โดยการกดที่เครื่องหมายสามเหลี่ยมข้างๆที่วงสีแดงไว้ พอกลับมาดูที่หน้า Spreadsheet ในช่อง A1 ถ้ามีข้อมูลขึ้นแบบนี้แสดงว่าถูกต้อง ให้กด Save ทั้ง Script และ Spreadsheet

เป็นอันว่าตอนนี้ Heroku app ของเราก็จะมี Request ส่งไปทุก 30 นาทีเพื่อไม่ให้มัน Inactive ได้แล้ว :D ยังไงก็อย่าลืมคอยเช็คชั่วโมงที่เหลืออยู่ด้วยนะคะ

--

--