Ruby On Rails Best Practice ตอน เลิกใช้ Time.now กันเถอะ
ดูจากหัวข้อแล้ว ท่านผู้อ่านหลายๆคนอาจมีคำถามขึ้นมาทันทีว่า
“!อ้าว ให้เลิกใช้ Time.now แล้วจะใช้เวลาปัจจุบันยังไงล่ะ” ก่อนจะตอบก็ของกล่าวถึงสาเหตุของปัญหาการใช้ Time.now เสียก่อนเชิญรับชมได้เลยครับ
Developer หลายๆท่านมักจะพบกับปัญหาบัคในเรื่องเวลาเช่น เวลาผิด วันที่ผิด ที่มักจะพบบน Production แต่เมื่อลอง test ในดูในเครื่อง dev กับไม่เจอบัค คำตอบคือเกิดจากเรื่อง Timezone ของเครื่องที่รัน web server กับเครื่อง dev ไม่ตรงกัน
ซึ่งสิ่งแรกที่ควรตรวจสอบคือ config.time_zone
ในไฟล์ application.rb
ให้ set timezone ให้ถูกต้อง
จากนั้นใน code เมื่อต้องการใช้เวลาปัจจุบันให้ refactor เป็นแบบนี้
เพราะว่าเนื่องจาก Time.now จะใช้ timezone ของเครื่องที่รัน ซึ่งบน production มักจะถูก set ไว้เป็น GMT+0(UTC) ทำให้ไม่ตรงกับเครื่องของ dev
แต่เมื่อใช้ Time.zone ซึ่งเป็น method ของ ActiveSupport ที่ใช้ timezone ที่ config ใน application.rb ทำให้หมดปัญหาเรื่อง timezone บน production
** ถ้ามีข้อมูลผิดพลาดประการใด รบกวน comment ด้านล่างได้เลยนะ
refer: https://rails-bestpractices.com/posts/2014/10/22/use-time-zone-now-instead-of-time-now/