Следуя этим инструкциям: http://neogregious.blogspot.com/2011/04/migrating-app-to-high-replication.html
Мне удалось перейти на хранилище данных с высокой репликацией, однако теперь я получаю следующее исключение:
datastore_errors.BadArgumentError('ancestor argument should match app ("%r" != "%r")' %
(ancestor.app(), app))
Данные модели выглядят примерно такthis:
class base_business(polymodel.PolyModel):
created = db.DateTimeProperty(auto_now_add=True)
class business(base_business):
some_data = db.StringProperty()
etc..
class business_image(db.Model):
image = db.BlobProperty(default=None)
mimetype = db.StringProperty()
comment = db.StringProperty(required=False)
# the image is associated like so
image_item = business_image(parent = business_item, etc... )
image_item.put()
Новое имя приложения не было назначено данным модели предка.В настоящий момент данные возвращаются, однако в журналы добавляется это сообщение об исключении.
Фактическая трассировка стека с использованием logging.exception:
2011-11-03 16:45: 40.211 ======= get_business_image исключение [аргумент предка должен соответствовать app ("'oldappname'"! = "S ~ newappname '")] ======= Traceback (последний вызов был последним): файл"/base/data/home/apps/s~newappname/3.354412961756003398/oldappname/entities/views.py", строка 82, в get_business_image business_img = business_image.gql ("ГДЕ ПРЕДСТАВИТЕЛЬ IS: ref_business and is_primary = True", ref_bdb.Key (business_key)). get () Файл "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/init.py", строка 2049, в результатах поиска =Файл self.fetch (1, config = config) "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/init.py", строка 2102, в выборке raw = raw_queryФайл ".Get (limit, offset, config = config)" / base / python_runtime / python_lib / version / 1 / google / appengine / api / datastore.py ", строка 1668, в Get config = config, limit = limit, offset = offset, prefetch_size = limit)) Файл" / base / python_runtime / python_lib / version / 1 / google / appengine / api / datastore.py ", строка 1600, в GetBatcher возвращает self.GetQuery (). run (_GetConnection (), query_options) Файл" /base/python_runtime/python_lib/versions/1/google/appengine/api/datastore.py ", строка 1507,в файле GetQuery order = self.GetOrder ()) Файл "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_rpc.py", строка 93, в файле positional_wrapper возвращает упакованный файл (* args, ** kwds)"/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_query.py", строка 1722, в файле init ancestor = ancestor) "/ base / python_runtime / python_lib / version / 1/google/appengine/datastore/datastore_rpc.py ", строка 93, в возвращении positional_wrapper упаковано (* args, ** kwds) файл" /base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_query.py "строка 1561, в init (ancestor.app (), app)) BadArgumentError: аргумент предка должен соответствовать приложению ("oldappname"! = "s ~ newappname")
Есть ли способ установить приложение вручную наданные модели?Могу ли я сделать что-то подобное, чтобы решить эту проблему?
if( ancestor.app() != app )
set_app('my_app')
put()
Прежде чем я сделаю это или применю любой другой HACK, я должен был что-то сделать для переноса данных?