5

I am having ruby on rails application which is hosted on Heroku. For testing purpose I have to change Date and Time of the server. Or set it manually to particular date..? Is there any way I can do that..? Using console or anything.?

dArK kNiGhT
  • 151
  • 2
  • 12

3 Answers3

4

I achieved this with the Timecop gem using an around_action to change the time in my staging environment.

module TimeTravelFilters
  extend ActiveSupport::Concern

  included do
    if Time::Clock.travel_ok?
      around_action :time_travel_for_request
    end
  end

  def time_travel_for_request
    time_travel
    yield
    time_travel_return
  end

  def time_travel
    if Time::Clock.fake_time
      Timecop.travel Time::Clock.fake_time
    else
      Timecop.return
    end
  end

  def time_travel_return
    Timecop.return
  end
end

Time::Clock is my own class that keeps track of the fake time.

I have a separate TimeController that lets me change the time on the server.

class TimeController < ApplicationController
  before_action :require_admin!

  def index
  end

  def update
    @clock.update_attributes params[:time_clock]
    redirect_to time_index_path
  end

  def destroy
    @clock.reset
    redirect_to time_index_path
  end
end
Kevin Lawrence
  • 698
  • 7
  • 23
  • Thanks @Kevin worked for me. It changed the time Ruby server not the heroku server. Whenever I restart Heroku, it changes date to current date. (y) – dArK kNiGhT Feb 27 '17 at 12:48
  • That's right. It's useful for testing series of steps that are spread over a period of time. – Kevin Lawrence Feb 27 '17 at 16:11
2

You cant change the date time but you can change the timezone

heroku config:add TZ="America/Los_Angeles"

http://blog.pardner.com/2012/08/setting-the-default-time-zone-for-a-heroku-app/

Keval
  • 3,246
  • 20
  • 28
  • as i said you cannot change date time but you can change the timezone by running command manually – Keval Feb 24 '17 at 10:32
1

For Rails apps running on Heroku, by default Time.now and some_time.localtime will display in UTC. If you'd like to assign a timezone to your app, you can set the TZ config variable to a time zone (which must be in the tz database timezone format).

heroku config:add TZ="America/Los_Angeles"
puneet18
  • 4,341
  • 2
  • 21
  • 27