Google Cloud Storage - 开发服务器上的PUT请求失败

24

在我的开发服务器上,Google Cloud Storage在PUT命令期间无法保存文件。

在生产环境中,这个命令很好用。响应标题(见下文)提供的调试信息很少。我硬盘有足够的空间,运行开发服务器时我以管理员身份运行,所以它应该拥有所有必要的权限。

有任何想法吗?

以下是相关的Traceback(我更改了存储桶名称):

INFO     2015-08-07 14:14:41,415 module.py:809] default: "PUT /_ah/gcs/bucket/IPR2013-00219%2C%20No.%2016%20Institution%20Decision%20-%20Decis_2015-08-07%2018-14-25.100000.pdf?upload_id=encoded_gs_file%3AZG9ja2V0YWxhcm0tZGV2L0lQUjIwMTMtMDAyMTksIE5vLiAxNiBJbnN0aXR1dGlvbiBEZWNpc2lvbiAtIERlY2lzXzIwMTUtMDgtMDcgMTgtMTQtMjUuMTAwMDAwLnBkZg%3D%3D HTTP/1.1" 500 -
Traceback (most recent call last):
  File "Project\libs\cloudstorage\storage_api.py", line 794, in __exit__
    self.close()
  File "Project\libs\cloudstorage\storage_api.py", line 787, in close
    self._flush(finish=True)
  File "Project\libs\cloudstorage\storage_api.py", line 841, in _flush
    self._send_data(data, self._written, file_len)
  File "Project\libs\cloudstorage\storage_api.py", line 874, in _send_data
    {'upload_path': self._path_with_token})
  File "Project\libs\cloudstorage\errors.py", line 141, in check_status
    raise ServerError(msg)
ServerError: Expect status [200] from Google Storage. But got status 500.
Path: '/bucket/IPR2013-00219%2C%20No.%2016%20Institution%20Decision%20-%20Decis_2015-08-07%2018-14-25.100000.pdf'.
Request headers: {'accept-encoding': 'gzip, *', 'content-range': 'bytes 0-195060/195061', 'x-goog-api-version': '2'}.
Response headers: {'date': 'Fri, 07 Aug 2015 18:14:41 GMT', 'transfer-encoding': 'chunked', 'server': 'Development/2.0'}.
Body: ''.
Extra info: {'upload_path': '/bucket/IPR2013-00219%2C%20No.%2016%20Institution%20Decision%20-%20Decis_2015-08-07%2018-14-25.100000.pdf?upload_id=encoded_gs_file%3AZG9ja2V0YWxhcm0tZGV2L0lQUjIw
MTMtMDAyMTksIE5vLiAxNiBJbnN0aXR1dGlvbiBEZWNpc2lvbiAtIERlY2lzXzIwMTUtMDgtMDcgMTgtMTQtMjUuMTAwMDAwLnBkZg%3D%3D'}.

2020年更新: 值得一提的是,我已经在这里向Google提出了该问题,但他们说不会修复它,因为它已经被修复了,尽管显然没有。

2022年更新: 仍然有问题!请参阅与Google的问题中所提议的补丁


嗯...我以为SO是云存储的官方支持渠道。 - speedplane
1
我遇到了同样的错误。尝试将App Engine升级到1.9.30(从1.9.25或者类似版本),并且升级了Python库GoogleAppEngineCloudStorageClient(至1.9.22)。但是没有成功。不知道这个问题是否与此相关:https://code.google.com/p/googleappengine/issues/detail?id=10996。顺便说一下,在部署的服务器上,存储命令可以正常工作,只是在开发服务器上无法工作。 - Scotty
@Scotty卡在同一个问题上了,你提到的链接是关于文件名长度的问题,我想。你们有什么线索吗? - Ahmad Muzakki
1
只是给你一些想法:安全权限?服务器配置错误?服务器容量?在开发环境中可能缺少的依赖关系是什么?也可以尝试使用较小的文件。 - Memristor
你在代码中添加了这个吗?import os import mock import google.auth.credentialsos.environ["DATASTORE_DATASET"] = "test" os.environ["DATASTORE_EMULATOR_HOST"] = "127.0.0.1:8001" os.environ["DATASTORE_EMULATOR_HOST_PATH"] = "127.0.0.1:8001/datastore" os.environ["DATASTORE_HOST"] = "http://127.0.0.1:8001" os.environ["DATASTORE_PROJECT_ID"] = "test"credentials = mock.Mock(spec=google.auth.credentials.Credentials) db = ndb.Client(project="test", credentials=credentials) - Brandon Wegner
显示剩余4条评论
2个回答

0
确保您具有访问存储桶的正确权限。您可以通过运行以下命令来检查:
gsutil ls -l gs://bucket/

如果您没有正确的权限,您需要联系您的 Google Cloud Storage 管理员以授予您所需的权限。

此外,请确保存储桶存在。您可以通过运行以下命令来检查:

gsutil ls gs://bucket/

确保您正在使用正确的API版本。您正在使用的API版本可能不受您的开发服务器支持。

-4
以下是一些步骤和注意事项,可帮助您解决此问题:
网络和防火墙设置:确保您的开发服务器具有与Google Cloud Storage通信所需的网络连接性。检查防火墙设置,确保没有任何可能阻止连接的限制。
凭据:验证您在开发服务器上是否使用了正确的Google Cloud Storage凭据和访问权限。确保您的凭据已正确配置,并具有执行PUT操作所需的访问权限。
库和SDK版本:确保您在开发环境中使用了正确且最新的Google Cloud Storage客户端库或SDK版本。过时或不兼容的库可能会导致问题。
存储桶配置:仔细检查您尝试访问的Google Cloud Storage存储桶的配置。确保它已正确设置,并且存储桶名称与您在代码中使用的名称匹配。
错误处理:考虑在代码中实施强大的错误处理和日志记录,以在出现此类问题时捕获详细的错误消息。这可以帮助您收集有关问题的更多信息。
与Google的问题:正如您提到的,您已向Google提出了问题,但他们似乎没有回应或提供帮助。您可以考虑与他们跟进,提供有关您的问题的详细信息,并要求进一步的帮助或澄清。
检查更新:确保您正在使用的库或SDK的最新版本。有时,更新可能会解决已知问题。
开发环境:考虑设置一个与生产环境类似的开发环境,以更准确地复制问题并识别任何与环境相关的问题。
社区和论坛:寻求与Google Cloud Storage相关的开发者社区和论坛的帮助。其他开发者可能遇到过类似的问题,并可以提供见解或解决方案。
需要注意的是,如果Google已经承认了该问题但没有提供修复,可能存在服务的限制或需要考虑的解决方法,直到问题得到解决。
由于问题已经持续存在一段时间,建议继续监控来自Google Cloud的官方更新和修复,并在您提到的问题中考虑所提出的补丁,如果它看起来是一个可行的解决方案的话。

1
当前政策:生成式人工智能(例如ChatGPT)被禁止使用。 - undefined
1
这似乎是ChatGPT的抄袭行为。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接