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

Azure 移动应用 Node.js 后端 - 推送通知错误状态代码 400

错误:在 Azure Kubernetes 服务 (AKS) 中轮换证书