Projet

Général

Profil

Bug #55980

database connection isn't set to UTC

Ajouté par Nicolas Roche il y a plus de 2 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
04 août 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

File "/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/django/db/backends/postgresql/utils.py" in utc_tzinfo_factory
  6.         raise AssertionError("database connection isn't set to UTC")

Exception Type: AssertionError at /
Exception Value: database connection isn't set to UTC

Fichiers

Révisions associées

Révision 4b68eeb1 (diff)
Ajouté par Emmanuel Cazenave il y a plus de 2 ans

force psycopg2 version to 2.8.6 < 2.9 (#55980)

see also upstream: https://github.com/psycopg/psycopg2/issues/1293

Révision 6d588e6f (diff)
Ajouté par Emmanuel Cazenave il y a plus de 2 ans

use python3-psycopg2 in the virtualenv (#55980)

Historique

#1

Mis à jour par Nicolas Roche il y a plus de 2 ans

Même erreur que sur #54925, contournée via :

$ ~/envs/publik-env-py3/bin/activate
$ pip install psycopg2-binary==2.8.6

#2

Mis à jour par Thomas Noël il y a plus de 2 ans

Normalement c'est justement corrigé par #54925, sais-tu ce qui aurait amené à un upgrade de psycopg2 dans ton virtualenv devinst ?

#3

Mis à jour par Nicolas Roche il y a plus de 2 ans

Oui, cette commande :

$ ansible-playbook -K -i inventory.yml install.yml

(mais j'ai bien conscience de te répondre à côté)

#4

Mis à jour par Thomas Noël il y a plus de 2 ans

Nicolas Roche a écrit :

(mais j'ai bien conscience de te répondre à côté)

Ok, je viens de voir que ce qui a résolu #54925, c'est une modification dans les tox.ini (alors que je pensais qu'on avait joué dans les setup.py).

Bref, il faut comprendre comment devinst gère le module psycopg2... j'ai tenté mais je suis décidément imperméable à Ansible.

#5

Mis à jour par Thomas Noël il y a plus de 2 ans

En fait c'est semble-t-il dans roles/base/tasks/main.yml :


- name: install psycopg2-binary
  pip:
    name: psycopg2-binary
    virtualenv: "{{venv_py3}}" 

et donc, voir comment on peut dire un "<2.9" ici.

#6

Mis à jour par Thomas Noël il y a plus de 2 ans

Voilà, à tester, un forçage de 2.8.6 comme tout le monde fait avec Django 2.2

(ça semble corrigé avec Django 3.2 et psycopg2 2.9.1)

#7

Mis à jour par Nicolas Roche il y a plus de 2 ans

à tester

Il y a un truc qui m'échappe.
Avec ce patch, j'ai bien la bonne version d'installée :

$ ansible-playbook -K -i inventory.yml install.yml
$ ~/envs/publik-env-py3/bin/activate
$ pip show psycopg2-binary
Version: 2.8.6

Mais toujours le crash "database connection isn't set to UTC".
Que je peux encore résoudre en désinstallant/réinstallant :

$ pip uninstall psycopg2-binary
$ pip install psycopg2-binary==2.8.6

#8

Mis à jour par Thomas Noël il y a plus de 2 ans

Quand tu fais le uninstall/install ça ne dit rien ? Ca modifie quoi ?

#10

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

  • Statut changé de Solution proposée à Solution déployée

Nicolas Roche a écrit :

Mais toujours le crash "database connection isn't set to UTC".

Moi pas, je pousse le patch (refait parce que conflit), on pourra y revenir si besoin.

commit bda26d6a2516c2d388ed4a9c77c0dcabc6cfd20d
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Tue Aug 17 15:34:30 2021 +0200

    force psycopg2 version to 2.8.6 < 2.9 (#55980)

    see also upstream: https://github.com/psycopg/psycopg2/issues/1293
#11

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

J'avais pas poussé ou un gros vilain a fait un push force sur main.

commit 4b68eeb1c374eb82a8d3cf8087bcf6129aae9a55
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Tue Aug 17 15:34:30 2021 +0200

    force psycopg2 version to 2.8.6 < 2.9 (#55980)

    see also upstream: https://github.com/psycopg/psycopg2/issues/1293
#12

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

  • Statut changé de Solution déployée à En cours
  • Assigné à mis à Emmanuel Cazenave

Nicolas Roche a écrit :

à tester

Il y a un truc qui m'échappe.
Avec ce patch, j'ai bien la bonne version d'installée :

[...]

Mais toujours le crash "database connection isn't set to UTC".
Que je peux encore résoudre en désinstallant/réinstallant :
[...]

Je viens de passer en bullseye, et je tombe moi aussi là dedans.

#13

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

Moyen que quelqu'un pose un pdb/set_trace() au point de l'erreur et vérifie la version et le chemin de la lib psycopg2 qui est chargée ?

#14

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Emmanuel Cazenave a écrit :

Je viens de passer en bullseye, et je tombe moi aussi là dedans.

Maintenant je n'arrive plus a reproduire, brouillard.

#15

Mis à jour par Nicolas Roche il y a plus de 2 ans

On voit bien 2 versions différentes.
C'est lié à l'installation de psycopg2 (sans -binary) via pip, sans que je comprenne par qui.

$ ansible-playbook -K -i nico-inventory.yml install.yml
$ pip show psycopg2-binary
Version: 2.8.6

...
> /home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/django/db/backends/postgresql/utils.py(6)utc_tzinfo_factory()
(Pdb) import psycopg2
(Pdb) psycopg2.__version__
'2.9.1 (dt dec pq3 ext lo64)'
(Pdb) psycopg2.__file__
'/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2/__init__.py'

$ ls -d /home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2*
/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2
/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2-2.9.1.dist-info
/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2_binary-2.8.6.dist-info
/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2_binary.libs

$ pip install psycopg2==2.8.6 -v
$ ls -d /home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2*
/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2
/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2-2.8.6.dist-info
/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2_binary-2.8.6.dist-info
/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2_binary.libs

> /home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/django/db/backends/postgresql/utils.py(6)utc_tzinfo_factory()
(Pdb) import psycopg2
(Pdb) psycopg2.__version__
'2.8.6 (dt dec pq3 ext lo64)'
(Pdb) psycopg2.__file__
'/home/nroche/envs/publik-env-py3/lib/python3.9/site-packages/psycopg2/__init__.py'

Je joins pour info un patch qui fonctionne chez moi.

#16

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

De ce que je vois là1, la syntaxe préférée et la plus claire c'est name: psycopg2==2.8.6, je ne sais quel opérateur utiliser l'option version: à mon avis le problème doit venir de là, ça fait peut-être >=2.8.6.

1 https://docs.ansible.com/ansible/latest/collections/ansible/builtin/pip_module.html

#17

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

  • Statut changé de Solution proposée à En cours
#18

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Je suis retombé dedans et j'ai pu analyser.

Le problème c'est qu'en installant psycopg2-binary, pip and co ne considèrent pas qu'une dépendance sur psycopg2 soit satisfaite, et donc psycopg2 re-installé ensuite parce que dépendance de django-tenant-schemas (on est pas les premiers à tomber dans cette mouise https://github.com/psycopg/psycopg2/issues/674).

Du coup petit ménage là dessus tout à la fin de devinst (ça ne marche pas de faire ça juste après l'installation de django-tenant-schemas, il doit y avoir un truc encore qui interfère, pyscopg2 se trouvant encore re-installé à un moment, du coup je fais vraiment tout à la fin et voilà).

#19

Mis à jour par Nicolas Roche il y a plus de 2 ans

Du coup petit ménage là dessus

Je pense qu'il n'y a plus besoin d'installer le paquet debian python3-psycopg2 (dans roles/base/tasks/main.yml),
puisque les paquets pip le remplacent.

#20

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Nicolas Roche a écrit :

Du coup petit ménage là dessus

Je pense qu'il n'y a plus besoin d'installer le paquet debian python3-psycopg2 (dans roles/base/tasks/main.yml),

J'ai tenté mais en fait non, ansible en a besoin pour la tache "- name: "create the postgresql user named {{user}}"".

#21

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

  • Statut changé de Solution proposée à En cours

Et maintenant sur un cook ça fait Error loading psycopg2 module: No module named 'psycopg2.extensions'.

Je vais tenter en mettant un lien symbolique vers python3-psycopg2, j'en ai ma claque.

#22

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Je sors l'artillerie lourde :

  • nettoyage des installations psycopg2 de pip
  • lien symbolique vers python3-psycopg2
  • pose d'une dist-info pour que pip nous lâche la grappe à tout jamais (sinon pip ne voit pas posycopg2 comme étant installé et il retente une installation etc)
#23

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

  • Statut changé de Solution proposée à En cours

Je suis un crétin.

#24

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Emmanuel Cazenave a écrit :

  • pose d'une dist-info

Il faut juste mettre un lien symbolique vers /usr/lib/python3/dist-packages/psycopg2-2.X.X.egg-info au lieu de recréer ça dans devisnt.

#25

Mis à jour par Thomas Noël il y a plus de 2 ans

Le -f de « rm -f $DSTDIR/psycopg2* » ne va sans doute pas toujours suffire : chez moi ..venv../lib/python3.9/site-packages/psycopg2 est un répertoire, peut-être faudrait-il faire un « rm -rf ».

#26

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Thomas Noël a écrit :

chez moi ..venv../lib/python3.9/site-packages/psycopg2 est un répertoire

Qui vient de l'installation via devinst/pip ?

Quoiqu'il ne soit l'idée du patch est de d'abord virer l'installation fait par pip, du coup plus de psycopg2 dans le venv, ensuite le script fait les liens symboliques :

cazino@cazino-laptop:~/envs/publik-env-py3/lib/python3.9/site-packages$ ls -l |grep psycopg2
lrwxrwxrwx  1 cazino cazino     39 14 oct.  16:20 psycopg2 -> /usr/lib/python3/dist-packages/psycopg2
lrwxrwxrwx  1 cazino cazino     54 14 oct.  16:20 psycopg2-2.8.6.egg-info -> /usr/lib/python3/dist-packages/psycopg2-2.8.6.egg-info

et sur l’exécution suivante le rm -f $DSTDIR/psycopg2* me vire bien les deux liens avant de les recréer.

#27

Mis à jour par Thomas Noël il y a plus de 2 ans

  • Statut changé de Solution proposée à Solution validée

Emmanuel Cazenave a écrit :

Thomas Noël a écrit :

chez moi ..venv../lib/python3.9/site-packages/psycopg2 est un répertoire

Qui vient de l'installation via devinst/pip ?

C'est une bonne question et je vous remercie de me l'avoir posée.

Effectivement ça doit être une scorie de manip chez moi : let's go.

#28

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

  • Statut changé de Solution validée à Solution déployée
commit 6d588e6f0ef4363f4dc7f69b2a1b2eaf2fdd0b1d
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Wed Oct 6 12:33:01 2021 +0200

    use python3-psycopg2 in the virtualenv (#55980)

Formats disponibles : Atom PDF