2015-10-13 5 views
6

Ich verwende eine Beego-Anwendung, die auf Updates in/etc/hosts (über Docker-Links) angewiesen ist, um andere Server zu finden./etc/hosts wird aktualisiert, aber die Anwendung verwendet keine neuen Hosts, es sei denn, sie wird neu gestartet oder nachdem sie zu lange gewartet hat. Nach der Überprüfung der Dokumentation für src/net/hosts sieht es so aus, als ob ich in einer 5-minütigen Aktualisierungszeit gesperrt bin.Gibt es eine Möglichkeit, Hosts in Go zu erzwingen?

Gibt es eine Möglichkeit, diesen Cache zu aktualisieren oder sehe ich dieses Problem falsch?

+0

Ich sehe auch keinen Weg, es ohne Montage zu tun. – thwd

+0

Ich könnte die Timeout-Konstante in src/net/hosts.go ändern und meine eigene benutzerdefinierte Go-Build rollen, aber es muss einen anderen Weg geben. Freut mich zu sehen, dass ich nicht der Einzige bin, sondern an diesem festhalte. – Diablojoe

+3

Normalerweise dynamische Änderungen sollten über einen anderen Mechanismus, wie DNS oder eine andere Konfig db erfolgen. Wenn Sie das Binary mit aktiviertem cgo erstellen, verwendet es den System-Resolver zum Nachschlagen von Hosts (das garantiert auch nicht, dass es für eine kurze Zeit von Ihrem System zwischengespeichert wird, aber es ist in den meisten Fällen weniger als 5 Minuten) – JimB

Antwort

0

The hosts file cache time in Go was shortened to 5 seconds. Das Verhalten von Go unterscheidet, ob der reine Go (Standard, mit Ausnahmen) oder Cgo-Resolver verwendet wird. Um den Go-internen Cache des pure Go-Resolvers zu umgehen, gibt es derzeit keine andere Möglichkeit, als den Cgo-Resolver zu erzwingen.

There are various ways to force Go to use the Cgo resolver. Die way to force Go to use the Cgo resolver suggested by the documentation wird die Umgebungsvariable GODEBUG zu netdns=cgo einzustellen.

Verwandte Themen