ERROR: source code not in proj.4 format {#proj}
FATAL: Peer authentication failed
bundle install échoue sur nokogiri ou rgeo
vendor/bundle ou /app
Memory overcommit must be enabled
403 Forbidden)
https://ekylibre.localhost/ non joignable / cert invalide
SECRET_KEY_BASE is empty
Lexicon::ProductionNature.count == 0
Apartment::TenantNotFound
Erreurs fréquentes et solutions, regroupées par symptôme.
ERROR: source code not in proj.4 format {#proj}
La version de PROJ installée par Ubuntu 20.04 est parfois trop récente pour la version de PostGIS embarquée.
bash
dpkg -l | grep ^ii.*proj
proj.tar.gz auprès d'un autre développeur Ekylibre/opt/proj/share/ :
bash
sudo mkdir -p /opt/proj/share
sudo tar -xzf proj.tar.gz -C /opt/proj/share
bash
export PROJ_LIB=/opt/proj/share
bundle exec rails s
FATAL: Peer authentication failed
pg_hba.conf utilise par défaut l'authentification peer pour les connexions Unix socket. Ekylibre s'attend à md5.
Éditer :
sudo vim /etc/postgresql/13/main/pg_hba.conf
Remplacer :
local all all peer
par :
local all all md5
Puis :
sudo systemctl restart postgresql
bundle install échoue sur nokogiri ou rgeo
Mettre à jour Bundler :
gem install bundler -v '>= 2.3'
Si l'erreur persiste, installer les en-têtes manquants :
sudo apt install -y libxml2-dev libxslt1-dev libgeos-dev libgeos++-dev libproj-dev
Vérifier JAVA_HOME :
echo $JAVA_HOME
# Doit retourner /usr/lib/jvm/java-8-openjdk-amd64
Si vide :
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.bashrc
source ~/.bashrc
vendor/bundle ou /app
Le container écrit avec son UID interne. Si votre UID hôte n'est pas 1000, les fichiers créés appartiennent à un user inexistant.
Vérifier votre UID/GID :
id
# uid=1001(djoulin) gid=1001(djoulin) ...
Renseigner dans docker/dev/.env :
UID=1001
GID=1001
Supprimer les volumes et rebuilder :
docker volume rm dev_bundle-volume dev_docker-dev
docker compose -f docker/dev/docker-compose.yml build --no-cache
Memory overcommit must be enabled
Sur l'hôte Linux :
sudo sysctl vm.overcommit_memory=1
echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
403 Forbidden)
Certains pipelines historiques pointent encore sur registry.gitlab.com. S'authentifier :
docker login registry.gitlab.com
# Login: <votre-username-gitlab>
# Password: <Personal Access Token avec scope read_registry>
https://ekylibre.localhost/ non joignable / cert invalide
Faire confiance à la CA Caddy :
sudo apt install -y libnss3-tools
docker/dev/trust-ca.sh
Redémarrer le navigateur après. Voir Docker dev §6.
Vérifier dans l'ordre :
Ports 80/443 ouverts depuis Internet (challenge ACME) — tester depuis votre poste (pas depuis le serveur) :
bash
curl -I http://example.com/
DNS du domaine ET du wildcard pointent vers le serveur :
bash
dig +short example.com
dig +short acme.example.com
Les deux doivent renvoyer l'IP du serveur.
L'ask endpoint répond (filtre on_demand_tls) :
```bash
docker compose -f docker/prod/docker-compose.yml exec caddy \
wget -O- http://app:3000/health
Si pas accessible : vérifier que `app` est healthy et que les containers sont sur le même réseau.
Logs Caddy :
bash
docker compose -f docker/prod/docker-compose.yml logs caddy \
| grep -iE "obtain|challenge|error" | tail -20
Rate-limit Let's Encrypt atteint (50 certs/semaine/domaine racine) :
urn:ietf:params:acme:error:rateLimited → attendre 7 jours./docker/prod/scripts/lexicon-reload.sh
SECRET_KEY_BASE is empty
Générer un secret et l'ajouter au .env :
echo "SECRET_KEY_BASE=$(openssl rand -hex 64)" >> docker/prod/.env
Le healthcheck a start_period: 600s (10 min) pour laisser le temps au lexicon de charger. Si l'app redémarre quand même :
# DB joignable ?
docker compose -f docker/prod/docker-compose.yml exec db pg_isready -U ekylibre
# Logs détaillés
docker compose -f docker/prod/docker-compose.yml logs --tail=200 app
bash
docker compose -f docker/prod/docker-compose.yml ps
bash
docker compose -f docker/prod/docker-compose.yml --profile duke logs -f duke-api
HASH_SECRET non-vide et au moins une clé LLM (ANTHROPIC_API_KEY ou MISTRAL_API_KEY) renseignéeLexicon::ProductionNature.count == 0
Le lexicon ne s'est pas chargé. Relancer :
bin/rake lexicon:load
docker compose -f docker/dev/docker-compose.yml exec app bundle exec rake lexicon:load
./docker/prod/scripts/lexicon-reload.sh
Apartment::TenantNotFound
Le tenant n'existe pas ou son nom dans l'URL ne correspond pas. Lister les tenants :
bundle exec rails runner "puts Apartment::Tenant.list"
Créer un tenant manquant :
# Native
bin/rake tenant:init TENANT=my-farm
# Docker
./docker/prod/scripts/tenant-init.sh my-farm admin@my-farm.com 'MotDePasse!'
Vérifier qu'il tourne :
# Native
ps aux | grep sidekiq
# Docker
docker compose -f docker/dev/docker-compose.yml ps sidekiq
Vérifier la connexion Redis depuis Sidekiq :
docker compose -f docker/dev/docker-compose.yml exec sidekiq \
bundle exec rails runner "puts Sidekiq.redis(&:ping)"
# PONG
Quand vous demandez de l'aide, joignez systématiquement :
git rev-parse HEAD)docker compose ... ps (variantes Docker) ou systemctl status postgresql redis-server (native)Cette documentation est open-source. Aidez-nous à l'améliorer en ouvrant une issue ou une pull request.