Django-storages[azure]: NotImplementedError: Этот бэкенд не поддерживает абсолютные пути
У меня есть приложение Django с задачей celery, которое я пытаюсь запустить на Azure, используя код, приведенный ниже.
Основная цель - чтение файлов python, yaml и шаблонов при выполнении задачи celery.
Я получаю следующую ошибку:
NotImplementedError: This backend doesn't support absolute paths.
Я использую django-filer и django-storages[azure] для обработки моих медиафайлов и использую Azure Storage для хранения всех моих файлов.
Моя модель выглядит следующим образом:
class Mymodel(models.Model):
...
id_config_file = FilerFileField(null=True, blank=True, related_name="spider_config_file", on_delete=models.CASCADE)
yaml_config_file = FilerFileField(null=True, blank=True, related_name="yaml_config_file", on_delete=models.CASCADE)
template_file = FilerFileField(null=True, blank=True, related_name="template_file", on_delete=models.CASCADE)
Ниже приведена моя задача по сельдерею:
@shared_task(name="schedule_test")
def schedule_test(id):
id = Mymodel.objects.get(id=id)
id_config_file = id.id_config_file.file
yaml_config_file = id.yaml_config_file.file
template_file = id.template_file.file
id_config_file_path = os.path.join(MEDIA_URL, f"{id_config_file}")
yaml_config_file_path = os.path.join(MEDIA_URL, f"{yaml_config_file}")
template_file_path = os.path.join(MEDIA_URL, f"{template_file}")
spec = importlib.util.spec_from_file_location("id", id_config_file_path)
id_module = importlib.util.module_from_spec(spec)
sys.modules["id"] = id_module
spec.loader.exec_module(id_module)
asyncio.run(id_module.run(
yaml_config_path = yaml_config_file_path,
input_file_path = template_file_path,
task_id = schedule_test.request.id
))
return f"[id: {id}]"
Мой settings.py содержит переменные конфигурации Azure Storage:
DEFAULT_FILE_STORAGE = 'azure.storage_production.AzureMediaStorage'
AZURE_ACCOUNT_NAME = os.environ.get('AZURE_ACCOUNT_NAME')
AZURE_CUSTOM_DOMAIN = f'{AZURE_ACCOUNT_NAME}.blob.core.windows.net'
MEDIA_URL = f'https://{AZURE_CUSTOM_DOMAIN}/media/'
Вот что я пытался реализовать, но безуспешно:
id_config_file_path = os.path.join(MEDIA_URL, f"{id_config_file}")
id_config_file_path = f"{MEDIA_URL}{id_config_file}"
id_config_file_path = f"{MEDIA_URL}{id_config_file.path}"
id_config_file_path = f"{MEDIA_URL}{id_config_file.url}"
id_config_file_path = f"{MEDIA_URL}{id_config_file.file}"
Вопрос
Как правильно настроить id_config_file_path, yaml_config_file_path и template_file_path, чтобы при запуске задачи celery она работала на Azure?