-
Notifications
You must be signed in to change notification settings - Fork 1
Erros comuns
Possíveis causas:
Os arquivos migrations
foram alterados
Para resolver rode os comandos de acordo com o estágio em que você está trabalhando (veja aqui):
Dev nativo:
-
Esvaziar banco de dados
scripts/populate_db/populate_db.py -p 5432 --empty_db
-
Criar tabelas
python mobilidade_rio/manage.py migrate
-
Subir dados
scripts/populate_db/populate_db.py
Dev local:
-
Eliminar arquivos do docker, e esvaziar disco virtual
docker-compose -f ./mobilidade_rio/dev_local/docker-compose_local.yml down -v docker image prune -f
-
Rodar o Docker novamente
docker-compose -f ./mobilidade_rio/dev_local/docker-compose_local.yml up
-
Subir dados
python scripts/populate_db/populate_db.py
Lembre-se que, para usar o
populate_db
, você deve ter os arquivos.csv
na pastafixtures
(veja aqui).
O que é o disco virtual?
Disco virtual é o disco que o Docker usa para armazenar os dados do banco de dados. Com o passar do tempo, ele pode ficar cheio, ocupando centenas de GBs.
Para esvaziá-lo, rode o comando
docker system prune -a -f
(oudocker system prune -a
para ver o que será apagado).
Causa:
O seu usuário atual (e.g. postgres
) não é dono do banco de dados.
Solução:
-
Se necessário, peça ajuda ao responsável pelo banco de dados.
-
Entre no banco de dados
postgres
:
Exemplo:
psql -h localhost -p 5433 -U postgres -W postgres
- Altere o dono do banco de dados (ex:
mobilidade_rio
) para o usuário em questão (ex:meu_usuario
):
ALTER DATABASE mobilidade_rio OWNER TO meu_usuario;
Situação:
Você executou a migration corretamente, e o arquivo de migration foi criado na pasta migrations
:
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, myapp
Running migrations:
Applying myapp.0001_initial... OK
Mas ao verificar o banco de dados, há apenas as tabelas padrão do Django:
myapp=# \dt
List of relations
Schema | Name | Type | Owner
‐--------------+----------------------------+-------+-------
public | auth_group | table | myapp
public | auth_group_users | table | myapp
public | auth_permission | table | myapp
public | auth_user | table | myapp
public | auth_user_groups | table | myapp
public | auth_user_user_permissions | table | myapp
public | django_admin_log | table | myapp
public | django_content_type | table | myapp
public | django_migrations | table | myapp
public | django_session | table | myapp
(10 rows)
O correto deveria ser:
myapp=# \dt
List of relations
Schema | Name | Type | Owner
‐--------------+----------------------------+-------+-------
public | auth_group | table | myapp
public | auth_group_users | table | myapp
public | auth_permission | table | myapp
public | auth_user | table | myapp
public | auth_user_groups | table | myapp
public | auth_user_user_permissions | table | myapp
public | django_admin_log | table | myapp
public | django_content_type | table | myapp
public | django_migrations | table | myapp
public | django_session | table | myapp
+ public | myapp_mymodel | table | myapp
(11 rows)
```
Solução - Remover todas as tabelas do banco de dados e recriar o SCHEMA:
PostgreSQL:
$ psql -U postgres
postgres=# DROP SCHEMA public CASCADE;
postgres=# CREATE SCHEMA public;
Algumas causas desse problema descobertas até agora são:
Causa 1: Faltam informações no banco de dados do app ou na fonte dos dados GPS
Isto pode ser a causa mais comum.
Será necessário investigar primeiro se a fonte dos dados GPS estão com muito poucos veículos.
Ou será preciso verificar se há algum problema com a tabela no banco de dados do app.
Causa 2: O Docker está inicializando com restrição de memória
Para reproduzir o erro, crie um docker-compose para testar essa funcionalidade:
mobilidade_rio/local_dev/docker-compose-limit.yml
version: "3.9"
services:
web:
extends:
file: docker-compose.yml
service: web
# Limitar recursos do Docker
cpus: "0.5"
mem_reservation: "10M"
mem_limit: "250M"
django-q:
extends:
file: docker-compose.yml
service: django-q
# Limitar recursos do Docker
cpus: "0.5"
mem_reservation: "10M"
mem_limit: "250M"
db:
extends:
file: docker-compose.yml
service: db
# Limitar recursos do Docker
cpus: "0.5"
mem_reservation: "10M"
mem_limit: "250M"
volumes:
dpostgres_data: