google-app-engine - 生产中的 Blobstore 不会获取 BlobKey(而在 dev_appserver 中会获取)

标签 google-app-engine python-2.7 google-cloud-storage blobstore

我有一个从给定网址获取图像并将其保存到 Google Cloud Storage 并检索服务网址的过程。现在,我的理解(根据我读过的文档)是我还必须在引用 GCS 文件的过程中创建一个 blob。如果我的理解不正确,请告诉我。

获取图像并尝试保存它的处理程序是:

img_request = urlfetch.fetch(img_url)
    if img_request.status_code == 200:
        img_title               = hashlib.sha1(img_url).hexdigest()
        img_content             = img_request.content
        img_type                = img_request.headers['content-type']
        cloud_storage_filename  = '/images/%s/%s' % (self.source_name, img_title)

        blobstore_filename      = '/gs%s' % cloud_storage_filename
        blobstore_key           = blobstore.create_gs_key(blobstore_filename)

        cloud_storage_file      = gcs.open(filename=cloud_storage_filename, mode='w', content_type=img_type)
        cloud_storage_file.write(img_content)
        cloud_storage_file.close()

        # If I print blobstore_key at this stage, I am getting a result here.
        blobstore_key           = blobstore.get(blobstore_key).key()
        blobstore_serving_url   = images.get_serving_url(blobstore_key)

        # Structured Property to be part of a Datastore Model
        img_model = data_model.Image(
            s_source_url    = img_url,
            k_blob_key      = blobstore_key,
            s_serving_url   = blobstore_serving_url
        )
        return img_model

这在 dev_appserver 上工作正常,但是,在生产中它会引发以下错误:

   blobstore_key           = blobstore.get(blobstore_key).key()
   AttributeError: 'NoneType' object has no attribute 'key'

为什么这个错误是在生产中而不是在 dev_app 服务器上出现的?好像一开始就没有生成 key ...

正如我在代码中评论的那样,当我在调用 blobstore.get(blobstore_key).key() 之前打印 blobstore_key 时,它会打印出一个 key ,所以它一直工作到那里。问题大概是,当我在键上调用 blobstore.get() 时,它得到 None... 为什么???

还是我做错了什么? 谢谢!

最佳答案

blobstore.get()BlobInfo.get() 的同义词,关于 this 的注释页面说:

However, BlobInfo objects are currently not available for GCS objects.

这可以解释为什么您的 blobstore.get() 返回 None

此外,您不希望从这两行中收到相同的结果吗?

blobstore_key = blobstore.create_gs_key(blobstore_filename)
blobstore_key = blobstore.get(blobstore_key).key()

关于google-app-engine - 生产中的 Blobstore 不会获取 BlobKey(而在 dev_appserver 中会获取),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828265/

相关文章:

php - Laravel5 和 GAE 使用多队列

google-app-engine - 如何从 GAE 服务器获取所有实体类型?

python - 需要 python 2.7+,但系统默认为 2.6

google-cloud-platform - `gcloud images create <image> --source-uri=<source>` 在 Cloud SDK 265.0.0 中给出错误

java - 如何强制复合索引出现在 Google Cloud 中?

google-app-engine - 使用 bulkloader 将字典导入 App Engine ndb.JsonProperty

java - 如何将谷歌应用程序引擎数据存储中的数据获取到客户端的 Angular js中?

python - 使用python打开csv文件

python - 停止索引太多

python - 如何修复文本转语音文件中 soundfx 的 <audio> 标签读取不一致的问题