Невозможно загрузить файл в azure blob starage в Azure django app service
Мой сервер django был впервые развернут на azure осенью прошлого года, и через полгода он внезапно перестал работать. (Все еще возможно, что за это время было выполнено несколько конвейеров с использованием разных веток).
Однако при запуске сервера django с локального хоста (т.е. используя те же переменные окружения AZURE_ACCOUNT_NAME и AZURE_ACCOUNT_KEY) я могу загружать и скачивать файлы из и в медиа директорию контейнера 'poytakirjat'. Но при выполнении кода в azure я могу только скачивать файлы, но не загружать в медиа-каталог 'poytakirjat'. Когда я пытаюсь загрузить что-то, я получаю только Http ошибку 502 и ничего больше, даже если я установил DEBUG в True.
Я даже не знаю, как получить некоторые файлы журналов.
models.py:
from django.db import models
from custom_azure import AzureMediaStorage
import datetime
from html.parser import HTMLParser
from tinymce import models as tinymce_models
from django.core.mail import send_mail
from ckeditor.fields import RichTextField
from django.contrib.auth.models import User
# Create your models here.
class Tiedostot3(models.Model):
otsikko = models.CharField(max_length=250)
kuvaus = RichTextField(blank=True)
paivitetty = models.DateTimeField(auto_now_add=True, verbose_name="Päivitetty")
tiedosto = models.FileField(upload_to='poytakirjat', storage=AzureMediaStorage(), verbose_name="Tiedosto", blank = True)
owner = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
class Meta:
ordering = ['-paivitetty']
verbose_name = "tiedosto"
verbose_name_plural="tiedostot"
def __unicode__(self):
return unicode(self.otsikko)
class Liite3(models.Model):
otsikko = models.CharField(max_length=250)
tiedosto = models.FileField(upload_to='poytakirjat', storage=AzureMediaStorage())
doku = models.ForeignKey(Tiedostot3, related_name="liitteet", on_delete=models.CASCADE)
class Meta:
verbose_name_plural="Liitteet"
def __unicode__(self):
return unicode(self.otsikko)
admin.py
from django.contrib import admin
from extranet.models import Tiedostot3, Liite3
class Liitet3Inline(admin.StackedInline):
model = Liite3
extra = 0
class Tiedostot3Admin(admin.ModelAdmin):
fields = ['otsikko', 'kuvaus', 'tiedosto']
list_display = ('otsikko','paivitetty')
inlines = [
Liitet3Inline,
]
def get_queryset(self, request):
qs = super(Tiedostot3Admin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(owner=request.user)
def save_model(self, request, obj, form, change):
obj.owner = request.user
obj.save()
admin.site.register(Tiedostot3, Tiedostot3Admin)
custom_azure.py:
from storages.backends.azure_storage import AzureStorage
import os
class AzureMediaStorage(AzureStorage):
account_name = os.environ['AZURE_ACCOUNT_NAME'] # Must be replaced by your <storage_account_name>
account_key = os.environ['AZURE_ACCOUNT_KEY'] # Must be replaced by your <storage_account_key>
azure_container = 'media'
expiration_secs = None
settings.py:
Поскольку вы столкнулись с ошибкой Http 502, попробуйте устранить эту проблему тремя способами :
Обратитесь к этой ссылке для получения информации о методах устранения неполадок. Также перезапуск приложения является самым простым способом восстановления после подобных ошибок.
Обратитесь к этой похожей теме SO Django Azure upload file to blob storage для получения дополнительной информации.