Closed amandine-sahl closed 3 years ago
Bonjour, çà serait possible d'envoyer plus de détail (la stack complete d'erreur / le resultat complet de la commande update.sh), sur les données partagées nous ne voyons pas quelle migration (et quelle table de base de données) peut être impacté. De pmlus, s'agit-il d'une mise à jour ou d'une premiere installation ?
J'imagine que la procédure suivie est celle là : https://geotrek.readthedocs.io/en/master/docker.html#docker et qu'il s'agit d'une installation from scratch. Le souci ne vient pas réellement d'une migration mais de la création des content types.
Je ne reproduis pas.
Gaël à bien cerné le problème Le problème survient avec une installation frèche de base
Pas de fichier custom.py ?
La base est bien vide au départ ?
Il y en a un qui est généré mais je n'ai pas surcouché de valeur
La base de données était vide mais à force de faire des tests il y avait un relicat de tables django.
J'ai créé une nouvelle base avec uniquement les extensions postgis et postgis_raster
J'obtiens l'erreur suivante :
Starting geotrek-admin_screamshotter_1 ... done
Postgres is up - executing command
Traceback (most recent call last):
File "./manage.py", line 20, in <module>
execute_from_command_line(sys.argv)
File "/opt/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/opt/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/venv/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
self.execute(*args, **cmd_options)
File "/opt/venv/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
output = self.handle(*args, **options)
File "/opt/geotrek-admin/geotrek/common/management/commands/migrate.py", line 25, in handle
super().handle(*args, **options)
File "/opt/venv/lib/python3.8/site-packages/django/core/management/base.py", line 85, in wrapped
res = handle_func(*args, **kwargs)
File "/opt/venv/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 75, in handle
self.check(databases=[database])
File "/opt/venv/lib/python3.8/site-packages/django/core/management/base.py", line 392, in check
all_issues = checks.run_checks(
File "/opt/venv/lib/python3.8/site-packages/django/core/checks/registry.py", line 70, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "/opt/venv/lib/python3.8/site-packages/django/core/checks/urls.py", line 13, in check_url_config
return check_resolver(resolver)
File "/opt/venv/lib/python3.8/site-packages/django/core/checks/urls.py", line 23, in check_resolver
return check_method()
File "/opt/venv/lib/python3.8/site-packages/django/urls/resolvers.py", line 408, in check
for pattern in self.url_patterns:
File "/opt/venv/lib/python3.8/site-packages/django/utils/functional.py", line 48, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/opt/venv/lib/python3.8/site-packages/django/urls/resolvers.py", line 589, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/opt/venv/lib/python3.8/site-packages/django/utils/functional.py", line 48, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/opt/venv/lib/python3.8/site-packages/django/urls/resolvers.py", line 582, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/opt/geotrek-admin/geotrek/urls.py", line 41, in <module>
urlpatterns.append(path('', include('geotrek.infrastructure.urls')))
File "/opt/venv/lib/python3.8/site-packages/django/urls/conf.py", line 34, in include
urlconf_module = import_module(urlconf_module)
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/opt/geotrek-admin/geotrek/infrastructure/urls.py", line 13, in <module>
urlpatterns = registry.register(models.Infrastructure, menu=settings.INFRASTRUCTURE_MODEL_ENABLED)
File "/opt/geotrek-admin/mapentity/registry.py", line 232, in register
return options.scan_views()
File "/opt/geotrek-admin/mapentity/registry.py", line 64, in scan_views
views_module = import_module(views_module_name)
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/opt/geotrek-admin/geotrek/infrastructure/views.py", line 12, in <module>
from .forms import InfrastructureForm
File "/opt/geotrek-admin/geotrek/infrastructure/forms.py", line 38, in <module>
class InfrastructureForm(BaseInfrastructureForm):
File "/opt/venv/lib/python3.8/site-packages/django/forms/models.py", line 268, in __new__
raise FieldError(message)
django.core.exceptions.FieldError: Unknown field(s) (name) specified for Infrastructure
Je ne reproduis pas non plus sur une fresh install suivant la doc. Je ne sais pas si tu as deja essayé par la passé, mais peut etre que ton image de base n'est pas à jour.
Il faudrait réessayer :
docker pull geotrekce/admin:latest
et recommencer sur une base vierge et en supprimant le dossier var créé.
sinon tu peux nous donner :
_Il faudrait réessayer :
docker pull geotrekce/admin:latest
et recommencer sur une base vierge et en supprimant le dossier var créé._
J'obtiens toujours le même résultat => django.core.exceptions.FieldError: Unknown field(s) (name) specified for Infrastructure
sinon tu peux nous donner :
GEOTREK_VERSION=latest
SERVER_NAME=localhost
# Do not set POSTGRES_HOST to localhost if postgresql is on the same physical machine. Leave it empty.
POSTGRES_HOST=
POSTGRES_PORT=5432
POSTGRES_USER=geotrek
POSTGRES_PASSWORD=xxx
POSTGRES_DB=geotrekdb
WEB_PORT=8001
API_PORT=8002
le contenu de ton docker-compose.yml
version: "3"
services:
memcached:
image: memcached:1.5-alpine
redis:
image: redis:5.0-alpine
volumes:
- redis:/data
convertit:
image: makinacorpus/convertit:latest
screamshotter:
image: makinacorpus/screamshotter:v2
celery:
image: geotrekce/admin:${GEOTREK_VERSION:-latest}
env_file:
- .env
volumes:
- .:/opt/geotrek-admin
depends_on:
- memcached
- redis
user: ${UID:-0}:${GID:-0}
command: celery -A geotrek worker -c 1
web:
image: geotrekce/admin:${GEOTREK_VERSION:-latest}
env_file:
- .env
ports:
- "${WEB_PORT:-8001}:8000"
volumes:
- .:/opt/geotrek-admin
depends_on:
- memcached
- redis
- screamshotter
- convertit
command: ./manage.py runserver 0.0.0.0:8000
user: ${UID:-0}:${GID:-0}
api:
image: geotrekce/admin:${GEOTREK_VERSION:-latest}
env_file:
- .env
ports:
- "${API_PORT:-8002}:8000"
volumes:
- .:/opt/geotrek-admin
depends_on:
- memcached
- redis
user: ${UID:-0}:${GID:-0}
volumes:
postgres:
redis:
J'ai fini par réussir à faire marcher le docker (enfin presque reste à servir les fichiers static) à partir d'une base existante. Si je pars d'une BD vièrge j'ai l'erreur signalée lors de mon premier message
fichier docker-compose.yml
version: "3"
services:
memcached:
image: memcached:1.5-alpine
redis:
image: redis:5.0-alpine
volumes:
- redis:/data
convertit:
image: makinacorpus/convertit:latest
screamshotter:
image: makinacorpus/screamshotter:latest
celery:
image: geotrekce/admin:${GEOTREK_VERSION:-latest}
env_file:
- .env
volumes:
- ./var:/opt/geotrek-admin/var
depends_on:
- memcached
- redis
user: ${UID:-0}:${GID:-0}
command: celery -A geotrek worker -c 1
web:
image: geotrekce/admin:${GEOTREK_VERSION:-latest}
env_file:
- .env
ports:
- "${WEB_PORT:-8001}:8000"
volumes:
- ./var:/opt/geotrek-admin/var
depends_on:
- memcached
- redis
- screamshotter
- convertit
user: ${UID:-0}:${GID:-0}
command: ./manage.py runserver 0.0.0.0:8000
networks:
default:
aliases:
- ${SERVER_NAME}
api:
image: geotrekce/admin:${GEOTREK_VERSION:-latest}
env_file:
- .env
ports:
- "${API_PORT:-8002}:8000"
volumes:
- ./var:/opt/geotrek-admin/var
depends_on:
- memcached
- redis
user: ${UID:-0}:${GID:-0}
volumes:
postgres:
redis:
Ok merci. deja à premiere vue le premier fichier est le fichier de developement. C'est peut etre pour çà qu'on ne constate pas / ne reproduit pas l'erreur. Le code du repo que tu as en local est "monté" par un volume sur le conteneur. Il se peut que ce soit lui le fautif et qui cause l'erreur.
volumes:
- .:/opt/geotrek-admin
Je vais regarder, mais nous uitilisons les docker-compose de prod sur nos instances, et les docker-compose de dev pour nos developpements sans probleme tous les jours et nous n'avons pas constaté de pb. essaie de commenter la ligner qui monte le code dans le conatiner.
Dans le second fichier, tu omets le montage du code et tu ne montes que le dossier var comme il faut, et la çà devrait mieux marcher (utilise directement le fichier de prod dans ce cas plutot qu'un mix entre les deux)
Les fichiers statiques et media doivent être servis par nginx, et sont disponibles dans var/static et var/media
Il se peut aussi que les fichiers recommandés (docker-compose-dev.yml et docker-compose-prod.yml aient changé depuis ta 1ere installation, aussi je recommanderai de le recréer (cp docker-compose-dev.yml docker-compose.yml ou cp docker-compose-prod.yml docker-compose.yml)
J'ai essayer d'installer geotrek avec Docker mercredi, donc je ne pense pas que les problèmes soient liés à des changements non récupérés.
Dans un premier temps j'ai scrupuleusement suivis la procédure décrite dans la documentation en utilisant le fichier docker-compose-prod et env-prod.dist et j'ai eu l'erreur (Failing row contains (3, null, admin, logentry)
). Cette erreur apparait uniquement lors de la création d'une nouvelle base pas avec la mise à jour d'une base existante.
Ensuite seulement, pour comprendre le problème, j'ai bidouillé les fichiers docker-compose notamment pour charger le code de l'application.
Bonjour, oui je me doute. les images docker et la procédure d'install sont testés dans la CI de test de geotrek, c'est à dire à chaque nouveau commit :
https://github.com/GeotrekCE/Geotrek-admin/blob/master/.circleci/config.yml#L40
ici on ajoute juste un container postgis 2.5 pour les tests de l'image de production (et on recupère l'image construite dans un job précédent), et on execute le update.sh dans la foulée.
Par acquis de conscience, j'ai testé tel que + avec une BDD en postgis 3.0, sans reproduire l'erreur. J'ai testé aussi avec la version de developement, sur master et sur le tag 2.57.0, sans reproduire l'erreur.
Par contre il y a eu un changement dernierement, si tu as un dossier env ou venv dans ton repo (que produisait geotrek precedemment), essaie de le supprimer avant de relancer. Il se peut aussi que l'ancienne version des dependences de geotrek remplace la version de l'image à cause du volume, ce qui pourrait causer ton erreur.
Tu peux retester en partant de 0 :
mode dev
mode prod
Tu ne devrais pas avoir de problème
Effectivement, après avoir supprimé le répertoire et reclonner le dépot, j'ai réussi à installer la base de données sans erreur. Merci pour les réponses à ce ticket
Je n'arrive pas à faire marcher Geotrek avec Docker. Lors de la migration j'obtiens les erreurs suivantes (testé avec la branche 2.57.0 et master)