此 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 操作部署。还是同样的问题。
我还在设置文件中尝试了一些黑客式的解决方法,但没有成功。
最佳答案
尝试在应用设置中添加以下内容
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 加载静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69545771/