Azure 上的 Django 应用错误地从 Azure Blob 加载静态文件
Posted
技术标签:
【中文标题】Azure 上的 Django 应用错误地从 Azure Blob 加载静态文件【英文标题】:Django app on Azure incorrectly loading static files from an Azure Blob 【发布时间】:2021-12-01 08:37:20 【问题描述】:此 Django 应用作为应用服务部署在 Azure 上,其静态和媒体文件存储在 Azure 存储帐户 - blob 中。
该项目过去运行良好,但发生了一些变化,现在问题如下。
应用设置文件的相关部分:
STATIC_URL = 'https://myappstorage.blob.core.windows.net/static/'
MEDIA_URL = 'https://myappstorage.blob.core.windows.net/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
# any static paths you want to publish
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
因此人们会期望,例如,位于存储根目录中的图标可以在 https://myappstorage.blob.core.windows.net/static/favicon 上找到,而且确实如此!
但是 azure 上的应用程序尝试加载的所有静态文件都会尝试从中加载
https://myappstorage.myappstorage.blob.core.windows.net/static/ (注意 myappstorage 的重复),对于媒体文件也是如此。
这会导致页面上没有静态文件,因为它们是从错误的 url 加载的。当我在本地运行应用程序时,它运行良好。我销毁它并重新创建它,但没有成功。现在我有两个副本正在运行,一个通过 FTP 和启动命令部署并使用 Github 操作。还是一样的问题。
我还在设置文件中尝试了一些 hack-ish 变通办法,但没有成功。
【问题讨论】:
【参考方案1】:尝试在应用设置中添加以下内容
DEFAULT_FILE_STORAGE = 'backend.custom_azure.AzureMediaStorage'
STATICFILES_STORAGE = 'backend.custom_azure.AzureStaticStorage'
STATIC_LOCATION = "static"
MEDIA_LOCATION = "media"
AZURE_ACCOUNT_NAME = "djangoaccountstorage"
AZURE_CUSTOM_DOMAIN = f'AZURE_ACCOUNT_NAME.blob.core.windows.net'
STATIC_URL = f'https://AZURE_CUSTOM_DOMAIN/STATIC_LOCATION /'
MEDIA_URL = f'https://AZURE_CUSTOM_DOMAIN/MEDIA_LOCATION
更多详情请参考document
【讨论】:
以上是关于Azure 上的 Django 应用错误地从 Azure Blob 加载静态文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Docker 中运行 Azure DevOps 作业时出现“找不到具有给定版本的模块 Az.Accounts”错误
将更改部署到 azure 时,sqitch deploy 命令失败
尝试使用 Azure CLI 创建 Web 应用时出现限制错误
Azure自动化| Runbook | Powershell | Get-AzRoleAssignment | Microsoft.Rest.Azure.CloudException