Приложение Django на Azure некорректно загружает статические файлы из Azure Blob
Это приложение Django развернуто на Azure как App Service, его статические и медиафайлы хранятся в учетной записи хранилища 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')
]
поэтому можно ожидать, что, например, favicon, который находится в корневом каталоге хранилища, можно найти на https://myappstorage.blob.core.windows.net/static/favicon и это действительно так!
Но все статические файлы, которые приложение на azure пытается загрузить, оно пытается загрузить из
https://myappstorage.myappstorage.blob.core.windows.net/static/. (обратите внимание на дублирование myappstorage), то же самое для медиафайлов.
Это приводит к тому, что статические файлы не применяются к странице, поскольку они загружаются с неправильного url. Когда я запускаю приложение локально, оно работает нормально. Я уничтожил его и создал заново, безрезультатно. Теперь у меня работают две копии, одна развернута через FTP и команду запуска, а вторая - с помощью действия Github. Все та же проблема.
Я также пробовал небольшие хакерские обходные пути в файле настроек, но безуспешно. Сейчас я работаю над этим около 10 часов и нахожусь в самом отчаянии.
Любая помощь будет очень высоко оценена - заранее спасибо!
Попробуйте добавить нижеприведенные настройки приложения
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}
обратитесь к этому документу для получения более подробной информации