[英]Data migration using blobstore API fails
我正在使用Blobstore API將文件從S3遷移到GCS。 我創建了南方數據遷移腳本來更新文件的元數據:
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項目中運行腳本時:
$ python manage.py migrate
我收到錯誤消息:
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項目,該項目使用了類似的想法,但是它已經很老了,不被支持。 Google已棄用某些API。
這並不是我認為最佳的解決方案,但可以解決問題。 我使用AppEngine遠程API與Django模型一起使用blobstore。 您首先需要修改app.yaml
腳本:
# app.yaml
handlers:
- url: /remoteapi.*
script: google.appengine.ext.remote_api.handler.application
login: admin
然后使用remote_api_shell.py
腳本訪問外殼程序。 您可以使用腳本訪問本地dev_appserver和遠程appengine。 對於本地dev_appserver,只需使用-s localhost:8080
。 確保settings.py
中的DATABASES
已正確settings.py
為指向正確的數據庫。
這是使用遠程API外殼的會話:
$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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.