Маркеры не отображаются на карте Google в Google App Engine - PullRequest
5 голосов
/ 18 апреля 2011

Я создал проект Google App Engine на Python, он работает на моем локальном хосте, но когда я загружаю его на geo-event-maps.appspot.com, маркеры не отображаются. У меня есть Cron, который работает, чтобы позвонить на / место. У меня нет ошибок журнала Моя база данных пуста! TXT файлы загружаются с:

    file_path = os.path.dirname(__file__)
    path = os.path.join(file_path, 'storing', 'txtFiles')

Есть ли способ проверить, были ли загружены файлы?!

Я в полной растерянности. У кого-нибудь были такие проблемы раньше?

Ниже мой main.py:

    '''
Created on Mar 30, 2011

@author: kimmasterson
'''
#!/usr/bin/env python

from google.appengine.ext import webapp
from google.appengine.ext import db
from placemaker import placemaker
import logging
import  wsgiref.handlers
import os, glob
from google.appengine.dist import use_library
use_library('django', '1.2')
from google.appengine.ext.webapp import template


class Story(db.Model):
    id = db.StringProperty()
    loc_name = db.StringProperty()
    title = db.StringProperty()
    long = db.FloatProperty()
    lat = db.FloatProperty()
    link = db.StringProperty()
    date = db.StringProperty()
class MyStories(webapp.RequestHandler):
    def get(self):
        temp = db.Query(Story)
        temp = temp.count()


        story_set = Story.all()

        template_values = {
            'storyTemp': story_set
        }

        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))
class place(webapp.RequestHandler):
    def get(self):
        #path = '/storing/txtFiles'
        file_path = os.path.dirname(__file__)
        path = os.path.join(file_path, 'storing', 'txtFiles')

        try:
            for infile in glob.glob(os.path.join(path, '*.txt')):
                    #print infile
                    f = open(infile, 'r')
                    data = f.read()
                    newfile = infile.replace('.txt', '')
                    newfile = newfile.replace('/storing/txtFiles/', '')
                    #print newfile
                    storyname = 'http://www.independent.ie/national-news/' + newfile
                    #print storyname
                    #print newfile
                    #logging.info(data)
                    p = placemaker('HSnG9pPV34EUBcexz.tDYuSrZ8Hnp.LowswI7TxreF8sXrdpVyVIKB4uPGXBYOA9VjjF1Ca42ipd_KhdJsKYjI5cXRo0eJM-')
                    print p.find_places(data)
                    for place in p.places:
                        splitted = place.name.split()
                        for word in splitted:
                            temp = db.Query(Story)
                            temp = temp.filter("link = ", storyname)
                            results = temp.fetch(limit=1)
                            if len(results) > 0:
                                break
                            elif 'IE' in word:
                                print temp
                                print 'success'
                                print 'name of the file is:' + newfile
                                story = Story(name=newfile, long=place.centroid.longitude, lat=place.centroid.latitude, link=storyname, loc_name=place.name, title=newfile).put()
                                #logging.info(type(place.centroid.latitude))    
        except:
            print 'error'

def main():
    application = webapp.WSGIApplication([('/', MyStories), ('/place', place)],
                                         debug=True)

    wsgiref.handlers.CGIHandler().run(application)


if __name__ == '__main__':
    main()

Вот мой cron.yaml

    cron:
- description: running place
  url: /place
  schedule: every day 11:05

App.yaml выглядит следующим образом:

application: geo-event-maps
version: 2
runtime: python
api_version: 1

handlers:
- url: .*
  script: main.py
builtins:
- datastore_admin: on

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Вы должны быть уверены, что ваши файлы загружаются вместе с кодом приложения, они не могут быть помечены как статические файлы или не будут доступны вашему коду.Запустите appcfg.py с флагом --verbose и убедитесь, что они загружены.

Вторая проблема, в вашем классе place вы определяете путь как path = '/storing/txtFiles'.Это не правильно.Ваш путь, вероятно, будет выглядеть примерно так:

file_path = os.path.dirname(__file__)
path = os.path.join(file_path, 'storing', 'txtFiles')

Кроме того, я советую вам не использовать print, вместо этого используйте self.response.out.write(stuff_to_write).

.используя key_names.Вы сможете сделать свой код немного более эффективным, чем запустив пакетный db.get вместо db.Query внутри вложенного цикла for.Используйте Appstats и попытайтесь минимизировать количество RPC.

1 голос
/ 18 апреля 2011

Сначала убедитесь, что вы обращаетесь к своим файлам, используя относительный путь.

Затем убедитесь, что вы не пометили файлы как статические в вашем app.yaml, поскольку статические файлы не загружаютсяв то же место, что и ваше приложение (они отправляются куда-то, чтобы серверы Google Frontend могли обслуживать их более напрямую).

...