django-on-docker
django-on-docker copied to clipboard
Making media files accessible from host
Thanks a lot for the detailed article @mjhea0.
I was able to follow it from start to end and the only part that didn't work for me was STATIC_ROOT = BASE_DIR / "staticfiles"
, where I'm getting TypeError: unsupported operand type(s) for /: 'str' and 'str'
, but replacing it with STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
made it work without major inconvenience.
Other than that, here's my main question: how can I make the media dir accessible from the host?
I tried in the same fashion as I was doing with my database (making sure the directory was created beforehand), but no luck. Here's the relevant change: https://github.com/lynx-chess/OpenBench/commit/cc99ad401b21c5333ed3350e3553c1a0458158a1
And here the sad result of the attempt.
Request Method: POST Request URL: http://localhost/
Django Version: 4.2.1 Python Version: 3.11.4 Installed Applications: ['OpenBench', 'OpenBench.templatetags', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'upload'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'htmlmin.middleware.HtmlMinifyMiddleware', 'htmlmin.middleware.MarkRequestMiddleware']
Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/app/web/upload/views.py", line 9, in image_upload filename = fs.save(image_file.name, image_file) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/django/core/files/storage/base.py", line 38, in save name = self._save(name, content) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/django/core/files/storage/filesystem.py", line 106, in _save fd = os.open(full_path, self.OS_OPEN_FLAGS, 0o666) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exception Type: PermissionError at / Exception Value: [Errno 13] Permission denied: '/home/app/web/media/quota.PNG'
You need to create a media dir in Dockerfile.