#34679 closed Bug (needsinfo)
Cannot run collectstatic with existing unsupported manifest file
| Reported by: | Jarosław Wygoda | Owned by: | Jarosław Wygoda |
|---|---|---|---|
| Component: | contrib.staticfiles | Version: | 4.1 |
| Severity: | Normal | Keywords: | |
| Cc: | Jarosław Wygoda | Triage Stage: | Unreviewed |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
I tried to run collectstatic with ManifestStaticFilesStorage on django 4.1 with existing staticfiles generated by django 4.2. Django 4.2 introduced manifest version 1.1 which is not supported by Django 4.1. I've found out that I can't run collectstatic when unsupported manifest already exists.
Change History (9)
comment:1 by , 2 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:2 by , 2 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | assigned → closed |
comment:3 by , 2 years ago
| Cc: | added |
|---|---|
| Resolution: | needsinfo |
| Status: | closed → new |
Hi Natalia,
I've already figured out this issue. Please take a look at my pr: https://github.com/django/django/pull/17015/files
You can reproduce it either by reverting my changes in django/contrib/staticfiles/storage.py and running TestManifestStaticFilesStorageRollback or by running ./manage.py collectstatic with ManifestStaticFilesStorage on Django 4.1 and then on Django 4.2.
Please find the traceback below.
Traceback (most recent call last):
File "/tests/django/tests/staticfiles_tests/test_storage.py", line 912, in test_collectstatic_with_unsupported_version
self.run_collectstatic()
File "/tests/django/tests/staticfiles_tests/cases.py", line 89, in run_collectstatic
call_command(
File "/tests/django/django/core/management/__init__.py", line 194, in call_command
return command.execute(*args, **defaults)
File "/tests/django/django/core/management/base.py", line 458, in execute
output = self.handle(*args, **options)
File "/tests/django/django/contrib/staticfiles/management/commands/collectstatic.py", line 184, in handle
if self.is_local_storage() and self.storage.location:
File "/tests/django/django/contrib/staticfiles/management/commands/collectstatic.py", line 245, in is_local_storage
return isinstance(self.storage, FileSystemStorage)
File "/tests/django/django/utils/functional.py", line 280, in __getattribute__
value = super().__getattribute__(name)
File "/tests/django/django/utils/functional.py", line 251, in inner
self._setup()
File "/tests/django/django/contrib/staticfiles/storage.py", line 540, in _setup
self._wrapped = storages[STATICFILES_STORAGE_ALIAS]
File "/tests/django/django/core/files/storage/handler.py", line 43, in __getitem__
storage = self.create_storage(params)
File "/tests/django/django/core/files/storage/handler.py", line 55, in create_storage
return storage_cls(**options)
File "/tests/django/django/contrib/staticfiles/storage.py", line 463, in __init__
self.hashed_files, self.manifest_hash = self.load_manifest()
File "/tests/django/django/contrib/staticfiles/storage.py", line 484, in load_manifest
raise ValueError(
ValueError: Couldn't load manifest 'staticfiles.json' (version 1.0)
Regards,
Jarek
comment:4 by , 2 years ago
In general, we don't support downgrade paths, e.g. sessions created in Django X may not work with Django < X etc.
comment:5 by , 2 years ago
Hello Jarek,
In addition to what Mariusz mentioned, I'm not being able to reproduce. I set the STORAGES as instructed and ran collectstatic on Django 4.2. The generated staticfiles.json has version 1.1 in it. I downgraded to Django 4.1 and ran collectstatic again, no errors.
comment:6 by , 2 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
comment:7 by , 2 years ago
I think this change will improve the developer experience. People finding bugs after upgrading Django will have easier time reverting to previous version. Some parts of Django support downgrade paths, e.g. migrations.
comment:8 by , 2 years ago
Hello,
In my last comment I mentioned that I can not even reproduce the reported issue. Could you share a test project with clear steps to reproduce?
Thanks, Natalia.
comment:9 by , 2 years ago
Sorry I missed your comment. You can reproduce it by running ./manifest/manage.py collectstatic with django 3 here https://github.com/jwygoda/manifest/tree/master. See https://github.com/jwygoda/manifest/blob/master/test.sh for project setup.
I've also wrote a test reproducing this issue here: https://github.com/django/django/pull/17015/files#diff-5d0a445ee662a0619f13e7dfbc73f1de73b76ea5888e15bc0b1a20f32eccd8eaR904
Hello!
I'll be closing this ticket as
needsinfosince there is no traceback nor a reproducer was provided, but please re-open if you have more concrete information (traceback, detailed steps to reproduce the bug, sample project to exercise this issue, etc.).You can also seek more help in the user forum. The best place to get answers to your issue is using any of the user support channels from this link.
Thank you!