Вы можете написать часть промежуточного программного обеспечения, которое использует Timecop для изменения времени в вашей промежуточной среде:
# /app/middlewares/time_traveler.rb
class TimeTraveler
def initialize(app)
@app = app
end
def call(env)
Timecop.travel(Time.local(2015, 10, 21, 12, 0, 0)) do
Rails.logger.info('Great Scott!')
@app.call(env)
end
end
end
# /config/environments/staging.rb
Rails.application.configure do
# ...
config.middleware.use TimeTraveler
end
Это использует фиксированное время, но вы можете использовать ввод из запроса (env. запрос), такие как параметры, заголовки или файлы cookie.
Однако это только меняет интерпретацию времени в Rubys. А не:
- Базы данных о времени. Например, любой код, использующий функцию SQL
NOW()
, может сломаться. - Системное время. Любые задания cron или повторяющиеся задачи будут по-прежнему выполняться на разных часах.
- Время в клиенте. Кеши будут недействительными. Все может сломаться.
Я бы не подумал сделать это на реальном производственном сервере хорошей идеей. Вместо этого настройте промежуточную среду (отдельное приложение Heroku).