Ruby On Rails Best Practice ตอน เลิกใช้ Time.now กันเถอะ

Puttipong Wongrak
Swiftlet Tech
Published in
1 min readJan 19, 2019

--

Photo by Jorge Franco on Unsplash

ดูจากหัวข้อแล้ว ท่านผู้อ่านหลายๆคนอาจมีคำถามขึ้นมาทันทีว่า
“!อ้าว ให้เลิกใช้ 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/

--

--