Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Deploy Heroku

Fiz o deploy mesclando suas explicações com as desse site:

https://blog.heroku.com/from-project-to-productionized-python

Minha aplicação até sobe, mas não consigo criar nem o super user... Embora a aplicação gere a tela index. Os erros ocorrem sempre que tento rodar o

heroku run python manage.py migrate

e o

heroku run python manage.py createsuperuser

Alguém conseguiria me ajudar? Preciso urgente.

10 respostas

Oii Raul, como você está?

Quando você executa o comando, quais são os logs de erro? Cole-os aqui por favor.

Fico no aguardo para te ajudar, tá bom?

É bem grande. Mas vou mandar. Um momento, acabei deletando o APP. Vou refazer.

Nesse caso eu separei o settings em 2: base.py e heroku.py, entretanto não configurei as variáveis de ambiente, então o heroku deve ler a variável de ambiente do base.py

020-10-28T16:57:52.308601+00:00 app[web.1]: 10.102.224.122 - - [28/Oct/2020:13:57:52 -0300] "POST /usuarios/autenticacao HTTP/1.1" 500 115736 "https://br-academia-control.herokuapp.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
2020-10-28T16:57:52.319516+00:00 heroku[router]: at=info method=POST path="/usuarios/autenticacao" host=br-academia-control.herokuapp.com request_id=60573609-8ab7-41bf-ab61-a2a317c7e890 fwd="179.215.124.125" dyno=web.1 connect=0ms service=153ms status=500 bytes=116004 protocol=https
2020-10-28T16:57:56.166799+00:00 app[web.1]: 10.102.224.122 - - [28/Oct/2020:13:57:56 -0300] "GET / HTTP/1.1" 200 1583 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
2020-10-28T16:57:56.171507+00:00 heroku[router]: at=info method=GET path="/" host=br-academia-control.herokuapp.com request_id=1a0295a8-5029-4ce1-81e4-93affde65985 fwd="179.215.124.125" dyno=web.1 connect=0ms service=63ms status=200 bytes=2012 protocol=https
2020-10-28T16:58:50.398424+00:00 app[api]: Starting process with command `python manage.py migrate` by user raulmatheus.rm@gmail.com
2020-10-28T16:59:01.256699+00:00 heroku[run.3097]: State changed from starting to up
2020-10-28T16:59:01.607920+00:00 heroku[run.3097]: Awaiting client
2020-10-28T16:59:01.641888+00:00 heroku[run.3097]: Starting process with command `python manage.py migrate`
2020-10-28T16:59:08.445228+00:00 heroku[run.3097]: Process exited with status 1
2020-10-28T16:59:08.501467+00:00 heroku[run.3097]: State changed from up to complete

O deploy até entra, mas o que não vai é na hora de rodar :

heroku run python manage.py migrate 

Meu código ta no github mas tá privado... se puder me ajudar eu coloco você como colaboradora para ter acesso ao código. Não consigo achar o erro de jeito algum.

Da o seguinte erro:

  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/base.py", line 85, in wrapped
    res = handle_func(*args, **kwargs)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 243, in handle
    post_migrate_state = executor.migrate(
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/executor.py", line 227, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/operations/models.py", line 92, in database_forwards
    schema_editor.create_model(model)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 322, in create_model
    sql, params = self.table_sql(model)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 159, in table_sql
    definition, extra_params = self.column_sql(model, field)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 212, in column_sql
    db_params = field.db_parameters(connection=self.connection)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/related.py", line 1004, in db_parameters
    return {"type": self.db_type(connection), "check": self.db_check(connection)}
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/related.py", line 1001, in db_type
    return self.target_field.rel_db_type(connection=connection)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/related.py", line 897, in target_field
    return self.foreign_related_fields[0]
  File "/app/.heroku/python/lib/python3.8/site-packages/django/utils/functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/related.py", line 644, in foreign_related_fields
    return tuple(rhs_field for lhs_field, rhs_field in self.related_fields if rhs_field)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/utils/functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/related.py", line 632, in related_fields
    return self.resolve_related_fields()
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/related.py", line 936, in resolve_related_fields
    related_fields = super().resolve_related_fields()
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/related.py", line 615, in resolve_related_fields
    raise ValueError('Related model %r cannot be resolved' % self.remote_field.model)
ValueError: Related model 'alunos.instrutor' cannot be resolved

Acho que consegui consertar esse primeiro erro usando o caminho relativo na pasta: migrations/0001__initial.py

Usei a seguinte notação:

('instrutor',models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apps.alunos.instrutor')),

As migrações estavam indo bem até que apareceu esse segundo erro:

  Applying alunos.0001_initial...Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/base.py", line 85, in wrapped
    res = handle_func(*args, **kwargs)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 243, in handle
    post_migrate_state = executor.migrate(
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/executor.py", line 227, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/migration.py", line 114, in apply
    operation.state_forwards(self.app_label, project_state)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/operations/models.py", line 80, in state_forwards
    state.add_model(ModelState(
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/state.py", line 95, in add_model
    self.reload_model(app_label, model_name)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/state.py", line 156, in reload_model
    self._reload(related_models)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/state.py", line 189, in _reload
    self.apps.render_multiple(states_to_be_rendered)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/state.py", line 306, in render_multiple
    model.render(self)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/state.py", line 567, in render
    body = {name: field.clone() for name, field in self.fields.items()}
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/migrations/state.py", line 567, in <dictcomp>
    body = {name: field.clone() for name, field in self.fields.items()}
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 513, in clone
    name, path, args, kwargs = self.deconstruct()
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/related.py", line 875, in deconstruct
    name, path, args, kwargs = super().deconstruct()
  File "/app/.heroku/python/lib/python3.8/site-packages/django/db/models/fields/related.py", line 586, in deconstruct
    app_label, model_name = self.remote_field.model.split('.')
ValueError: too many values to unpack (expected 2)

Oii Raul, segundo o log de erro ValueError: too many values to unpack (expected 2) é porque em algum momento a função split está retornando mais ou menos de 2 elementos, porém o esperado é exatamente dois. Tente o seguinte:

  • Vá nos arquivos apps.py dos todos os seus apps, por exemplo: há um app chamado usuarios, vá até o arquivo apps.py dele:
    • Você irá encontrar algo como:
from django.apps import AppConfig


class UsuariosConfig(AppConfig):
    name = 'usuarios'
    label = "users"
  • Verifique se o valor do atributo label possui um ponto (.), por exemplo: label = 'my.users' e caso contenha, retire esse ponto. E tente compilar novamente.

Caso ainda não resolva, fique tranquilo, a gente vai se falando.

No caso, nenhum deles tem o atributo label. Todos os Apps só tem o name.

solução!

Consegui fazer o Deloy finalmente... a solução foi a seguinte:

                ('matricula', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='alunos.Matricula')),

A syntax no migrations tem que ser a seguinte: nome do app em minusculo e nome da tabela em Maiusculo

Exemplo: alunos.Matricul

Que bom que conseguiu. Vendo os trechos anteriores de códigos que você disponibilizou eu não consegui identificar. Estava te escrevendo para você compartilhar o código comigo. Mas, fico extremamente feliz que tenha conseguido achar a solução. Mandou super bem, parabéns!

Grande abraço!

Foi um pouco de sorte rsrs, vi uma resposta na internet sobre esse assunto... Já tinha visto pelo menos umas 15 respostas diferentes e nenhuma deu certo. Aí nessa... Consegui hahaha e era tão simples. Qualquer problema futuro, que eu precisar de ajuda, basta me passar seu git que eu compartilho a versão com voceê sem problemas... E obrigado por mais uma vez estar tentando me ajudar! Aprendendo muito e muito satisfeito com a Alura e sua equipe! Será que fico rico? Hahaha

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software