Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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