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.now
Time.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?
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.)
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.
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