Project

General

Profile

Bug #101684

Erreur 500 sur un import de site

Added by Yann Weber about 2 months ago. Updated about 1 month ago.

Status:
Fermé
Priority:
Normal
Assignee:
Target version:
-
Start date:
05 February 2025
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

Description

L'import du fichier pour la mise en place des pages de Publik Documents sur l'instance de recette de la mairie de Saint-Paul provoque une 500.

Le problème a été détecté hier par Marie, je reproduis ce matin sur l'instance en question. La trace :

févr. 04 20:27:07 node1 uwsgi/combo[2161320]: {address space usage: 374702080 bytes/357MB} {rss usage: 134303744 bytes/128MB} [pid: 2161320|app: 0|req: 12487/50427] 0.0.0.0 () {60 vars in 1220 bytes} [Tue Feb  4 20:27:07 2025] GET /service-worker.js => generated 4800 bytes in 14 msecs (HTTP/1.0 200) 3 headers in 123 bytes (1 switches on core 0)
févr. 04 20:27:07 node1 uwsgi[2158272]: combo ERROR portail-mairie-saintpaul.test-re.entrouvert.org 90.104.198.255 08181d1e34a24f9cb43eac7c65d24a46 s:jrz4 r:7F5C Internal Server Error: /manage/site-import
                                         Traceback (most recent call last):
                                           File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 89, in _execute
                                             return self.cursor.execute(sql, params)
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                         psycopg2.errors.NotNullViolation: null value in column "uuid" of relation "wcs_wcsformcell" violates not-null constraint
                                         DETAIL:  Failing row contains (2, _linkslist:2, 1, t, eservices:pdo-demarche-exemple-qui-depose-un-document, , , 4, , {}, f, , 2023-10-23 17:54:47.172+00, null, null, null).

                                         The above exception was the direct cause of the following exception:

                                         Traceback (most recent call last):
                                           File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 55, in inner
                                             response = get_response(request)
                                                        ^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 197, in _get_response
                                             response = wrapped_callback(request, *callback_args, **callback_kwargs)
                                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view
                                             return view_func(request, *args, **kwargs)
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view
                                             return view_func(request, *args, **kwargs)
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/views/generic/base.py", line 104, in view
                                             return self.dispatch(request, *args, **kwargs)
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/views/generic/base.py", line 143, in dispatch
                                             return handler(request, *args, **kwargs)
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/views/generic/edit.py", line 153, in post
                                             return self.form_valid(form)
                                                    ^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/combo/manager/views.py", line 210, in form_valid
                                             pages = import_site(json_site, request=self.request)
                                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/combo/data/utils.py", line 129, in import_site
                                             pages = Page.load_serialized_pages(data.get('pages') or [], request=request, job=job)
                                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/combo/data/models.py", line 782, in load_serialized_pages
                                             cls.load_serialized_cells(cells_to_load)
                                           File "/usr/lib/python3/dist-packages/combo/data/models.py", line 756, in load_serialized_cells
                                             cell.object.import_subobjects(cell_data)
                                           File "/usr/lib/python3/dist-packages/combo/data/models.py", line 2177, in import_subobjects
                                             link.save()
                                           File "/usr/lib/python3/dist-packages/django/core/serializers/base.py", line 288, in save
                                             models.Model.save_base(self.object, using=using, raw=True, **kwargs)
                                           File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 877, in save_base
                                             updated = self._save_table(
                                                       ^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 1020, in _save_table
                                             results = self._do_insert(
                                                       ^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 1061, in _do_insert
                                             return manager._insert(
                                                    ^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 87, in manager_method
                                             return getattr(self.get_queryset(), name)(*args, **kwargs)
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 1805, in _insert
                                             return query.get_compiler(using=using).execute_sql(returning_fields)
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py", line 1822, in execute_sql
                                             cursor.execute(sql, params)
                                           File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 67, in execute
                                             return self._execute_with_wrappers(
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
                                             return executor(sql, params, many, context)
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                           File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute
                                             with self.db.wrap_database_errors:
                                           File "/usr/lib/python3/dist-packages/django/db/utils.py", line 91, in __exit__
                                             raise dj_exc_value.with_traceback(traceback) from exc_value
                                           File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 89, in _execute
                                             return self.cursor.execute(sql, params)
                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                         django.db.utils.IntegrityError: null value in column "uuid" of relation "wcs_wcsformcell" violates not-null constraint
                                         DETAIL:  Failing row contains (2, _linkslist:2, 1, t, eservices:pdo-demarche-exemple-qui-depose-un-document, , , 4, , {}, f, , 2023-10-23 17:54:47.172+00, null, null, null).
févr. 04 20:27:07 node1 uwsgi/combo[2158272]: {address space usage: 374329344 bytes/356MB} {rss usage: 134680576 bytes/128MB} [pid: 2158272|app: 0|req: 7535/50428] 0.0.0.0 () {70 vars in 1627 bytes} [Tue Feb  4 20:27:06 2025] POST /manage/site-import => generated 145 bytes in 890 msecs (HTTP/1.0 500) 7 headers in 316 bytes (1 switches on core 0)

Je ne reproduis pas sur ma devinst locale. Je ne vois pas ce que j'aurais pu raté lors du déploiement de l'instance qui provoque cette erreur.

History

#2

Updated by Valentin Deniaud about 2 months ago

Je pense que l'export que tu utilises est trop vieux, depuis les cellules ont gagnées des uuids et la colonne a été passée à null=False (#96180 puis #96426). Il faudrait régénérer cet export

#3

Updated by Yann Weber about 2 months ago

  • Status changed from Nouveau to Information nécessaire
  • Assignee set to Yann Weber

Valentin Deniaud a écrit :

Je pense que l'export que tu utilises est trop vieux, depuis les cellules ont gagnées des uuids et la colonne a été passée à null=False (#96180 puis #96426). Il faudrait régénérer cet export

Merci pour la piste (et les références vers les tickets), c'est la même que Fred évoque dans le ticket lié.

Ma crainte d'un autre problème est lié au fait que je ne reproduis pas sur mon installation locale qui embarque pourtant le code de #96180 et #96426.

Donc soit je rate quelque chose, soit l'export devrait aussi être trop vieux pour ma devinst non ? D'autant que je n'ai rien trouvé dans les commits entre le tag v6.37 (la version en recette (?)) et main qui expliquerait un comportement plus permissif de l'import.

Je vais attendre que Marie génère un nouvel export et tente de l'importer pour fermer le ticket.

#4

Updated by Marie Kuntz about 2 months ago

pour info Fred a généré un nouve export

#5

Updated by Yann Weber about 1 month ago

  • Status changed from Information nécessaire to Fermé

Also available in: Atom PDF