使用 azure 作为 Django 的存储后端(使用 django-storages)
Posted
技术标签:
【中文标题】使用 azure 作为 Django 的存储后端(使用 django-storages)【英文标题】:Using azure as a storage backend for Django (using django-storages) 【发布时间】:2016-01-14 02:26:54 【问题描述】:我正在使用 django-storages,我过去曾用它来处理 AWS S3。但是在使用 Microsoft Azure 时,我遇到了在谷歌上没有返回任何结果的错误。
我正在使用 python 3 和 Django 1.8.4 进行开发。我正在使用 django-storages 和 django-storages-redux 来支持 python 3。
当调用 ./manage.py collectstatic
并输入 yes
时,我收到两个 (!) 错误:
Traceback (most recent call last):
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/storages/backends/azure_storage.py", line 44, in exists
self.connection.get_blob_properties(
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/storages/backends/azure_storage.py", line 34, in connection
self._connection = azure.storage.BlobService(
AttributeError: 'module' object has no attribute 'BlobService'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/core/management/__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/core/management/base.py", line 393, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/core/management/base.py", line 444, in execute
output = self.handle(*args, **options)
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle
collected = self.collect()
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 107, in collect
handler(path, prefixed_path, storage)
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 305, in copy_file
if not self.delete_file(path, prefixed_path, source_storage):
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 218, in delete_file
if self.storage.exists(prefixed_path):
File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/storages/backends/azure_storage.py", line 46, in exists
except azure.WindowsAzureMissingResourceError:
AttributeError: 'module' object has no attribute 'WindowsAzureMissingResourceError'
我遵循了将 django-storages 与 azure here 结合使用的简单说明。
任何想法可能导致此错误?有没有人成功部署了一个 django 1.8 应用程序,将 azure 作为存储和静态文件后端?
edit: 我在 django-storages 模块中做了一些修改: 使用
import azure.storage.blob
self._connection = azure.storage.blob.blobservice.BlobService(
而不仅仅是
self._connection = azure.storage.BlobService(
但是现在我遇到了不同的错误,这让我相信这个问题实际上更深层次。
【问题讨论】:
【参考方案1】:我找到了问题:
django-storages-redux 已经过时,与最新版本的 azure sdk 不兼容
作者的拉取请求正在进行中:
https://github.com/jschneier/django-storages/pull/86
我在这里做了自己的快速修复:
https://github.com/schumannd/django-storages
【讨论】:
【参考方案2】:由于您在我们的存储库之上使用存储平台,我们的支持可能会受到限制。看起来对 python 客户端库的重组和重命名部分进行了更改,并且您使用的“Azure-Storage”平台没有更新他们的工具。其他人在使用这个平台时也遇到了类似的问题。请参阅针对 Django-storages 提出的以下问题:https://bitbucket.org/david/django-storages/issues/225/azure-storages-are-incorrectly-imported
查看您的 Django 解决方案的“后端”文件,看起来与直接使用我们的存储服务相比,这为您提供的便利很少。您可能需要考虑使用我们的库,因为它将为您提供最大的数据存储灵活性。如果您更喜欢使用 Django-storages,您可以联系他们,看看他们是否会修复它或分叉他们的代码库并自己进行修复。你可以在这里看到我们为改进这个库所做的所有工作: https://github.com/Azure/azure-storage-python/tree/dev
谢谢!
【讨论】:
MS 产品是否直接支持 Django 存储 API?以上是关于使用 azure 作为 Django 的存储后端(使用 django-storages)的主要内容,如果未能解决你的问题,请参考以下文章
在 azure 后端存储中使用状态文件将 terraform 的输出传递到 Azure Devops Pipeline
为什么我的Django应用程序在Azure上使用UUID无效语法失败