Hi,
I am trying to upload files to a unit that I created in Libraries v2, and I get a frontend error when uploading the file.
Checking the cms logs on the host, I get:
cms-1 | During handling of the above exception, another exception occurred:
cms-1 |
cms-1 | Traceback (most recent call last):
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
cms-1 | response = get_response(request)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
cms-1 | response = wrapped_callback(request, *callback_args, **callback_kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper
cms-1 | return view_func(request, *args, **kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/views/generic/base.py", line 105, in view
cms-1 | return self.dispatch(request, *args, **kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/utils/decorators.py", line 48, in _wrapper
cms-1 | return bound_method(*args, **kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 515, in dispatch
cms-1 | response = self.handle_exception(exc)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 475, in handle_exception
cms-1 | self.raise_uncaught_exception(exc)
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 486, in raise_uncaught_exception
cms-1 | raise exc
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 512, in dispatch
cms-1 | response = handler(request, *args, **kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/edx-platform/openedx/core/djangoapps/content_libraries/rest_api/utils.py", line 24, in wrapped_fn
cms-1 | return fn(*args, **kwargs)
cms-1 | ^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/edx-platform/openedx/core/djangoapps/content_libraries/rest_api/blocks.py", line 205, in put
cms-1 | result = api.add_library_block_static_asset_file(usage_key, file_path, file_content, request.user)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/edx-platform/openedx/core/djangoapps/content_libraries/api/blocks.py", line 893, in add_library_block_static_asset_file
cms-1 | component_version = authoring_api.create_next_component_version(
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/openedx_learning/apps/authoring/components/api.py", line 259, in create_next_component_version
cms-1 | content = contents_api.get_or_create_file_content(
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/openedx_learning/apps/authoring/contents/api.py", line 173, in get_or_create_file_content
cms-1 | content.write_file(ContentFile(data))
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/openedx_learning/apps/authoring/contents/models.py", line 366, in write_file
cms-1 | storage.save(self.path, file)
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/core/files/storage/base.py", line 49, in save
cms-1 | name = self._save(name, content)
cms-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^
cms-1 | File "/openedx/venv/lib/python3.11/site-packages/django/core/files/storage/filesystem.py", line 100, in _save
cms-1 | os.makedirs(directory, exist_ok=True)
cms-1 | File "<frozen os>", line 215, in makedirs
cms-1 | File "<frozen os>", line 215, in makedirs
cms-1 | File "<frozen os>", line 225, in makedirs
cms-1 | PermissionError: [Errno 13] Permission denied: '/openedx/media-private/openedx-learning'
cms-1 | [pid: 38|app: 0|req: 425/1179] 172.18.0.2 () {70 vars in 4575 bytes} [Fri Mar 6 14:59:28 2026] PUT /api/libraries/v2/blocks/lb:CQ:Navigation:html:naviguer-dans-cette-formation-777eeeedf241/assets/static/boutons-de-navigation.png => generated 8696 bytes in 82 msecs (HTTP/1.1 500) 10 headers in 641 bytes (3 switches on core 0)
It seems like it attempts to write to a folder it can’t write to. Is there something I forgot to configure when installing OpenEdX ?
This is with Ulmo.