私はdynamically generated KMLを使用していますが、Googleのサーバーでは「タイミングの問題」のため断続的に失敗します。私が最後にチェックしたのはうまくいったが、それは一致しているようだ。データを新鮮なままメモリに保存するために、5分ごとにページにアクセスするcronジョブを作成する必要がありますか?サーバーサイドKMLジェネレータは、次のとおりです。動的に生成されたKMLのトラブルシューティング
class KMLHandler(webapp2.RequestHandler):
def get(self):
self.response.headers['Cache-Control'] = 'public,max-age=%s' \
% 86400
start = datetime.datetime.now() - timedelta(days=60)
from google.appengine.api import memcache
memcache_key = 'ads'
data = memcache.get(memcache_key)
if data is None:
a = Ad.all().filter('modified >',
start).filter('published =',
True).order('-modified').fetch(1000)
memcache.set('ads', a)
else:
a = data
dispatch = 'templates/kml.html'
template_values = {'a': a, 'request': self.request,
'host': os.environ.get('HTTP_HOST',
os.environ['SERVER_NAME'])}
path = os.path.join(os.path.dirname(__file__), dispatch)
output = template.render(path, template_values)
self.response.headers['Content-Type'] = \
'application/vnd.google-earth.kml+xml'
self.response.headers['Content-Length'] = len(output)
self.response.out.write(output)
- テンプレートファイルには、次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
{% for ad in a %}
{% if ad.geopt %}
<Placemark><name></name><description>
<![CDATA[{% if ad.uri2view %}<img src="{{ ad.uri2view }}">{% endif %}<a href="http://www.koolbusiness.com/vi/{{ad.key.id}}"> {{ ad.title }} </a><br/>{{ad.text|truncatewords:20}}]]></description><Point><coordinates>{{ad.geopt.lon|floatformat:2}},{{ad.geopt.lat|floatformat:2}}</coordinates></Point></Placemark>{% endif %}{% endfor %}</Document></kml>
- 私もそれが正しいことを保証するために、KMLのバリデータを通じてoutputを実行しました。それは動的に生成され、私はそれをキャッシュしようとします。控えめな理由がなければ断続的に失敗します。私はKMLを生成するPythonを持っており、コードがチェックされていて、動作しているはずです。プログラムのどこが間違っているのか分かりません。スクリプトの出力を静的なkmlファイルとして保存しても動作し、KMLは有効なので、動的に生成されたときにGoogleに配信する際に「タイミングの問題」があるようです。しかし、これをさらにトラブルシューティングするにはどうすればよいですか?代わりにJSONを使用するように全体の戦略を変更することができますが、それはたくさん記録され、私はそれを動作させることに近いと思います。
私は考えることができる3つの戦略はJinja2のテンプレートに
- 変更
- JSONに変更はなく、KML
- にデータを保持するために、ファイルごとに5分にアクセスするcronジョブを書くです任意のヘルプ
どのような種類の障害ですか? App Engineのログにエラーが表示されていますか? –
時々ログのタイムアウトエラーが表示され、KMLに障害が発生したときには、それがdeadlineexceedederrorであり、正確にチェックされると思います。 –
何が失敗するかは、問題が何であるかを実際に知るためには非常に重要です。 –