Collectstatic configuração de erro ao implantar o Django app com dokku
-
21-12-2019 - |
Pergunta
Quando a implantação de um Django app usando dokku estou recebendo o seguinte erro
Collectstatic configuration error. To debug, run:
$ heroku run python ./manage.py collectstatic --noinput
Eu não encontrei nenhuma maneira de executar heroku run python ./manage.py collectstatic --noinput
para um dokku recipiente, mas quando eu estou tentando dokku run my app python ./manage.py collectstatic --noinput
, a estática arquivos são copiados com êxito para o STATIC_ROOT
pasta e nenhuma mensagem de erro dado.
Eu poderia resolver o problema colocando collectstatic
comando em Procfile
:
web: python manage.py collectstatic --noinput ; gunicorn myapp.wsgi
Ainda assim, eu gostaria de saber o que estava a causar o problema e como ele pode ser depurado.Qualquer idéias?
Solução
Você deve ter quatro configurações no seu settings.py arquivo chamado MEDIA_ROOT
, MEDIA_URL
, STATIC_ROOT
e STATIC_URL
.
Eu meu set assim:
MEDIA_ROOT = 'media'
STATIC_ROOT = 'static'
MEDIA_URL = '/media'
STATIC_URL = '/static'
Dentro da janela de encaixe recipiente que é criado, você irá encontrar a sua aplicação em /app que faz o caminho de mídia /app/media/ e o caminho estático /app/static/.
Infelizmente, se você não tiver um media estático e pasta cometidos no git, ele não terá criado em /app automaticamente.
Desde o git não permitir que você para de cometer uma pasta vazia (só compromete-se arquivos), eu faço o seguinte em meus projetos:
mkdir media static
touch media/.dir
touch static/.dir
git add media/.dir static/.dir
git commit -m 'Make media and static directories'
O 'toque' comando cria um arquivo vazio, então você 'git add' os dois recém-criado arquivos e verificá-los.
Agora, quando você empurra, os diretórios vai estar lá para conter os meios e arquivos estáticos.Basta ter em mente que toda vez que você 'git push', um novo contêiner é criado, e o velho é destruído.Enquanto isso não é um problema para seus arquivos estáticos, seus meios de comunicação serão perdidas, a menos que você armazená-lo em outro lugar.