首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用blobstore API迁移数据失败

使用blobstore API迁移数据失败
EN

Stack Overflow用户
提问于 2014-07-27 20:51:37
回答 1查看 253关注 0票数 0

我正在使用Blobstore API将文件从S3迁移到GCS。我创建了south数据迁移脚本来更新文件的元数据:

代码语言:javascript
复制
from google.appengine.ext import blobstore
from google.appengine.api import images

class Migration(DataMigration):

    def forwards(self, orm):
    images = orm['core.Image'].objects.all()
    for image in images:
        blob_key = blobstore.create_gs_key('/gs/mybucket/' + image.name)
        try:
            url = images.get_serving_url(blob_key)
        except images.ObjectNotFoundError:
            url = ''
        image.url = url
        image.save()
...

当我尝试在AppEngine项目中运行该脚本时:

代码语言:javascript
复制
$ python manage.py migrate

我得到了一个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/user/Downloads/google_appengine/google/appengine/api/blobstore/blobstore.py", line 485, in create_gs_key
    rpc = create_gs_key_async(filename, rpc)
  File "/home/user/Downloads/google_appengine/google/appengine/api/blobstore/blobstore.py", line 525, in create_gs_key_async
    lambda rpc: rpc.response.blob_key())
  File "/home/user/Downloads/google_appengine/google/appengine/api/blobstore/blobstore.py", line 226, in _make_async_call
    rpc = create_rpc()
  File "/home/user/Downloads/google_appengine/google/appengine/api/blobstore/blobstore.py", line 220, in create_rpc
    return apiproxy_stub_map.UserRPC('blobstore', deadline, callback)
  File "/home/user/Downloads/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 413, in __init__
    self.__rpc = CreateRPC(service, stubmap)
  File "/home/user/Downloads/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 67, in CreateRPC
    assert stub, 'No api proxy found for service "%s"' % service
AssertionError: No api proxy found for service "blobstore"

我发现manage.py没有利用AppEngine开发服务器引导和身份验证的优势。有人知道如何解决这个问题吗?如何使用manage.py的AppEngine开发工具。

我查阅了django-rocket-engine项目,它使用了类似的想法,但它太旧了,不受支持。其中一些API已经被Google弃用。

EN

回答 1

Stack Overflow用户

发布于 2014-07-29 08:18:22

这并不是我认为的最佳解决方案,但它确实起到了作用。我使用了Django Remote API来使用AppEngine和Django模型。首先需要修改app.yaml脚本:

代码语言:javascript
复制
# app.yaml
handlers:
- url: /remoteapi.*
  script: google.appengine.ext.remote_api.handler.application
  login: admin

然后使用remote_api_shell.py脚本访问外壳。您可以使用该脚本访问本地dev_appserver和远程应用程序引擎。对于本地dev_appserver,只需使用-s localhost:8080即可。确保settings.py中的DATABASES设置正确,指向正确的数据库。

下面是使用远程API shell的会话:

代码语言:javascript
复制
$GAE_SDK_ROOT/google_appengine/remote_api_shell.py -s APP-ID.appspot.com
Email: <admin-email>
Password: 
App Engine remote_api shell
Python 2.7.5+ (default, Feb 27 2014, 19:39:55) 
[GCC 4.8.1]
The db, ndb, users, urlfetch, and memcache modules are imported.
s~APP-ID> import os, sys
s~APP-ID> sys.path.insert(0, os.environ['GAE_SDK_ROOT'] + '/google_appengine/lib/django-1.5')
s~APP-ID> import django
s~APP-ID> django.VERSION
(1, 5, 4, 'final', 0)
s~APP-ID> sys.path.append('/home/user/myproject/myproject')
s~APP-ID> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
'settings'
s~APP-ID> from google.appengine.ext import blobstore
s~APP-ID> from google.appengine.api import images
s~APP-ID> from myproject.core.models import Image
s~APP-ID> images = Image.objects.all()
s~APP-ID> for image in images:
...     blob_key = blobstore.create_gs_key('/gs/mybucket/' + image.name)
...     try:
...         url = images.get_serving_url(blob_key)
...     except images.ObjectNotFoundError:
...         url = ''
...     image.url = url
...     image.save()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24981148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档