Запись файлов в файловую систему heroku dyno для последующего использования?
Я знаю, что файловая система heroku является эфемерной.
Файлы, которые я пишу - это капчи, mp3 и другие изображения, которые должны находиться в файловой системе всего несколько минут.
Но я не могу заставить ничего работать правильно.
Для капчи, вот код:
def new(request):
r = redis.Redis(host='localhost', port=6379, db=0)
image = ImageCaptcha()
alphanum_str = '0123456789ABCDEF'
captcha_answer = ''.join(
random.choice(alphanum_str) for i in range(5))
timestamp = str(datetime.now().timestamp())
image.write(captcha_answer, os.path.join(
settings.BASE_DIR, f'hendrixia/static/captchas/{timestamp}.png'))
context = {
'captcha_timestamp': timestamp
}
r.set(f'id-{timestamp}', captcha_answer)
r.expire(f'id-{timestamp}', 300)
template_name = 'the_axis/new.html'
return render(request, template_name, context)
Проблема заключается в строке image.write(). Он использует этот пакет: https://github.com/lepture/captcha
Я пробовал hendrixia/staticfiles/captchas, hendrixia/media/captchas, staticfiles/captchas, temp_captchas/ и другие. И да, я убедился, что эти директории существуют в heroku dyno (я поместил пустой a.txt в каждую).
Может ли кто-нибудь помочь с этим?
Сообщение об ошибке / Traceback:
2022-03-04T11:09:39.412897+00:00 app[web.1]: 2022-03-04 11:09:39,412 DEBUG HTTP b'GET' request for ['10.1.93.196', 30646]
2022-03-04T11:09:39.440527+00:00 app[web.1]: 2022-03-04 11:09:39,424 ERROR Internal Server Error: /the-axis/new/
2022-03-04T11:09:39.440529+00:00 app[web.1]: Traceback (most recent call last):
2022-03-04T11:09:39.440537+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
2022-03-04T11:09:39.440537+00:00 app[web.1]: response = get_response(request)
2022-03-04T11:09:39.440540+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
2022-03-04T11:09:39.440540+00:00 app[web.1]: response = self.process_exception_by_middleware(e, request)
2022-03-04T11:09:39.440540+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
2022-03-04T11:09:39.440541+00:00 app[web.1]: response = wrapped_callback(request, *callback_args, **callback_kwargs)
2022-03-04T11:09:39.440541+00:00 app[web.1]: File "./the_axis/views.py", line 26, in new
2022-03-04T11:09:39.440541+00:00 app[web.1]: settings.BASE_DIR, f'hendrixia/static/captchas/{timestamp}.png'))
2022-03-04T11:09:39.440544+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/captcha/image.py", line 59, in write
2022-03-04T11:09:39.440544+00:00 app[web.1]: return im.save(output, format=format)
2022-03-04T11:09:39.440544+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/PIL/Image.py", line 2148, in save
2022-03-04T11:09:39.440545+00:00 app[web.1]: fp = builtins.open(filename, "w+b")
2022-03-04T11:09:39.440549+00:00 app[web.1]: FileNotFoundError: [Errno 2] No such file or directory: '/app/hendrixia/hendrixia/static/captchas/1646392179.414503.png'