Не удается найти видео, загруженное с помощью selenium на Heroku - Django

У меня есть следующее приложение, над которым я работаю, но у меня есть ошибка, которую я не могу понять, что мне делать.

Приложение выглядит следующим образом пользователь добавляет ссылку на видео, задача отправляется на celery через redis, celery скачивает это видео и сохраняет его в media/AppVimeoApp/videos/.mp4, затем отображает его на странице с src="media\AppVimeoApp\videos....mp4".

Это приложение отлично работает локально, однако на heroku задание отображается как успешное, но видео нигде нет, оно мне нужно временно.

tasks.py

@shared_task
def download_video():
    chrome_options = webdriver.ChromeOptions()
    chrome_options.binary_location = str(os.getenv('GOOGLE_CHROME_BIN'))
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--start-maximized")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-extensions")
    chrome_options.add_argument('--disable-dev-shm-usage')    
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument('--disable-software-rasterizer')
    chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 640 XL LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166")
    chrome_options.add_argument("--disable-notifications")
    chrome_options.add_argument('--window-size=1920,1080')

    chrome_options.add_experimental_option("prefs", {
        "download.default_directory": f"{settings.MEDIA_ROOT}\\AppVimeoApp\\videos",
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
        "safebrowsing_for_trusted_sources_enabled": False,
        "safebrowsing.enabled": False
        }
    )

    driver = webdriver.Chrome(executable_path=str(os.getenv('CHROMEDRIVER_PATH')), chrome_options=chrome_options)

    driver.get('videolink')

    time.sleep(5)

    while True:
        try:
            driver.find_element(by=By.XPATH, value='/html/body/div[2]/div[1]/div[6]/div[2]/div[1]/a').click()
            break
        except:
            time.sleep(1)
            continue

    time.sleep(5)

    return ("Downloaded")

Я буду очень благодарен, если вы сможете мне помочь. Спасибо.

celery скачивает это видео и сохраняет его

Это не будет работать на Heroku.

Каждый dyno имеет свою собственную изолированную эфемерную файловую систему . Какой бы процесс ни запускал Celery (часто это процесс worker), он сохранит файл в своей собственной файловой системе, которая отличается от файловой системы, видимой вашим web dynos.

Более того, все эти файловые системы теряют изменения при каждом перезапуске дино. Это происходит часто - как минимум раз в день. Поэтому сохранение файлов таким образом не является отличным решением на Heroku даже с одного dyno.

Лучшим решением было бы сохранить видео в стороннем хранилище объектов, например Amazon S3 или Azure Blob Storage. У Heroku есть документация по использованию S3 таким образом.

Я наконец-то придумал решение

Heroku использует linux, поэтому директория загрузки должна быть

"download.default_directory": f"{settings.MEDIA_ROOT}/AppVimeoApp/videos",

А на windows

"download.default_directory": f"{settings.MEDIA_ROOT}\\AppVimeoApp\\videos",
Вернуться на верх