Pourquoi Heroku se connecte-t-il en utilisant l'heure du serveur plutôt que le fuseau horaire des Rails?

mise à jour: Ok, je n'ai pas formulé un bon Q à répondre. Je lutte encore avec heroku étant sur -07: 00 UTC et moi à + 02: 00 UTC.

Q: Comment puis-je obtenir le journal écrit à l'heure correcte.la zone ? La différence de 9 heures, heroku (us west) - Norvège, distrait de travailler avec. Je reçois dans ma production.journal (à l'aide de heroku logs):

Traitement ProductionController#créer au format xml (pour 81.26.51.35 2010-04-28 23: 00: 12) [POST]

Comment puis-je obtenir pour écrire 2010-04-29 08:00:12 +02:00 GMT ?

notez que j'exécute heroku et que je ne peux pas régler l'heure du serveur moi-même, comme on pourrait le faire sur vos serveurs amazon EC2. Ci-dessous est ma question précédente, je vais le laisser comme il détient quelques informations intéressantes sur l'heure et les zones.


Pourquoi Time.now rendement de l'heure locale du serveur lorsque j'ai défini un autre fuseau horaire dans mon environment.rb

config.time_zone = 'Copenhagen'

je l'ai mis dans une vue.

<p> Time.zone <%= Time.zone %> </p>
<p> Time.now <%= Time.now %> </p>
<p> Time.now.utc <%= Time.now.utc %> </p>
<p> Time.zone.now <%= Time.zone.now %>  </p>
<p> Time.zone.today <%= Time.zone.today %> </p>

rendant ce résultat sur mon application à heroku

temps.horaire (GMT+01:00) Copenhague

temps.maintenant Lun Apr 26 08:28: 21 -0700 2010

temps.maintenant.UTC Lun Apr 26 15: 28:21 UTC 2010

temps.zone.maintenant 2010-04-26 17:28:21 +0200

temps.zone.aujourd' 2010-04-26

Time.zone.now donne le bon résultat. Dois-je passer de Time.nowTime.zone.now, partout? Semble lourd. Je ne me soucie vraiment pas de ce que l'heure locale du serveur est, il me donne des tas de problèmes en raison de l'utilisation étendue de Time.now. Suis-je un malentendu quelque chose de fondamental ici?

34
demandé sur Benjamin Oakes 2010-04-27 11:04:59

3 réponses

après une enquête plus approfondie sur mes propres problèmes de fuseau horaire Heroku, j'ai trouvé un post qui indique que vous en fait spécifiez le fuseau horaire au niveau de l'application, en utilisant la commande suivante:

heroku config:add TZ=Europe/Oslo

je crois que c'est la réponse à tous vos problèmes. Gracieuseté de http://www.reality.hk/articles/2010/01/07/1319/ (Edit: rupture du lien En 2012.08.23. copie Archivée.)

73
répondu sevennineteen 2012-08-23 19:19:43

sans pouvoir changer l'heure réelle du serveur (ce que je ne pense pas que vous pourrez faire sur Heroku), votre seule option est de convertir les heures vous-même.

Si Time.zone.now est trop encombrant, vous pouvez définir un fuseau horaire global en utilisant le tzinfo gem:

$tz = TZInfo::Timezone.get("Europe/Oslo")
$tz.now # current time in Norway

Mais c'est encore un changement global dans votre application et non significativement différent de ce que vous faites.

2
répondu sevennineteen 2016-05-20 12:43:15

j'ai trouvé que les solutions ci-dessus ne fonctionnaient pas sur Heroku. Je l'ai mis dans mon fichier config/environments/production.RB Assurez-vous de le mettre avant que votre logger soit initialisé

Rails::Rack::Logger.class_eval do
# Override logging to spit out time in different zone to easier find user reported 
errors
# https://github.com/rails/rails/blob/v3.2.14/railties/lib/rails/rack/logger.rb#L38
 def started_request_message(request)
  'Started %s "%s" for %s at %s' % [
    request.request_method,
    request.filtered_path,
    request.ip,
    Time.now.in_time_zone('Melbourne') ]
 end
end
0
répondu Dennis 2018-07-03 23:03:20