Rails поддерживает DateTime
с разрешением наносекунд, но я заметил, что это зависит от машины, на которой выполняется приложение.
На моем MacBook, работающем в режиме Mojave, Time.zone.now.strftime("%N")
всегда будет выводить 9-значныйчисло, которое заканчивается на 000
, (например, "122981000"
).Это означает, что на Mac разрешение ограничено микросекундной шкалой.
Однако в Linux эта же команда возвращает число с полным разрешением наносекунд (например, "113578523"
).
Моя проблема возникает, когда я использую rspec
и мне нужно сравнить некоторые значения DateTime
.
Когда я работаю на моем Mac, тесты проходят без нареканий, но потом, когда наш CI (Travis) будет работатьтот же тест, он проваливается примерно так:
expected: 2019-04-09 19:14:27.214939637 -0300
got: 2019-04-09 19:14:27.214939000 -0300
Проблема здесь в том, что наша база данных Postgres ограничена микросекундами, как и мой Mac, где она не дает сбой.Я храню DateTime
в БД, затем читаю его обратно и сравниваю с тем, что у меня в памяти.DB округляется до микросекунд, и поэтому сравнение не удается.
Можно ли заставить Rails работать с точностью до микросекунд?
Мое намерение состоит в том, чтобы не нужно вручную округлять или урезать временные метки в каждом тесте.