2
respostas

Dois comandos no shell em uma linha no shell, como evitar conflitos?

O comando passado na aula

  • name: configurando o banco de dados shell: '. /home/ubuntu/tcc/venv/bin/activate; python /home/ubuntu/tcc/manage.py migrate'
  • name: carregando os dados iniciais shell: '. /home/ubuntu/tcc/venv/bin/activate; python /home/ubuntu/tcc/manage.py loaddata clientes.json'

Estava retornando o erro "Couldn't import Django." então tentei incluir o & no final de cada linha e o terminal não retornou erro. Qual o conceito por trás dessa lógica?

Meu comando ficou

  • name: 5. configurando o banco de dados shell: '. /home/ubuntu/tcc/venv/bin/activate; python /home/ubuntu/tcc/manage.py migrate &'

  • name: 6. carregando os dados iniciais shell: '. /home/ubuntu/tcc/venv/bin/activate; python /home/ubuntu/tcc/manage.py loaddata clientes.json &'

2 respostas

Olá, Danilo!

O erro "Couldn't import Django" geralmente ocorre quando o ambiente virtual (virtualenv) não está ativado corretamente, ou quando o Python não consegue encontrar o módulo Django. Quando você adicionou o & no final do comando, você fez com que ele fosse executado em segundo plano. Isso pode ter evitado o erro visível, mas não necessariamente resolveu o problema subjacente.

O & no final de um comando no shell faz com que ele seja executado em segundo plano, permitindo que o terminal continue a aceitar novos comandos sem esperar que o anterior termine. No entanto, isso não garante que o comando tenha sido executado com sucesso, apenas que ele foi iniciado.

Para resolver o problema de forma mais eficaz, você pode verificar se o ambiente virtual está sendo ativado corretamente. Certifique-se de que o caminho para o activate está correto e que não há erros no script de ativação.

Uma alternativa seria separar a ativação do ambiente virtual e a execução do comando em duas etapas distintas, para garantir que o ambiente esteja corretamente configurado antes de executar o comando Django. Por exemplo:

- name: Ativando o ambiente virtual
  shell: '. /home/ubuntu/tcc/venv/bin/activate && echo "Ambiente ativado"'

- name: Configurando o banco de dados
  shell: 'python /home/ubuntu/tcc/manage.py migrate'

- name: Carregando os dados iniciais
  shell: 'python /home/ubuntu/tcc/manage.py loaddata clientes.json'

Dessa forma, você pode verificar se o ambiente foi ativado corretamente antes de prosseguir com os comandos Django.

Bons estudos!

Depois de muitas tentativas eu descobri que o problema era causado pela versão das bibliotecas descritas no requirements.txt se eu trocar a parte do ansible que as instala pelos nomes das bibliotecas tudo funciona. Então se atualizassem no git iria ajudar quem está fazendo o curso 4 anos depois da publicação :-)

  - name: Atualizar pip e instalar dependências Python no venv #instalando as bibliotecas pelo nome para pegar a versão mais atualizada
    become_user: ubuntu
    shell: |
      source /home/ubuntu/tcc/venv/bin/activate
      pip install --upgrade pip
      pip install asgiref django djangorestframework pytz sqlparse typing-extensions
    args:
      executable: /bin/bash

  # - name: Instalando dependencias com pip #estão desatualizadas na origem
 #   pip:
 #     virtualenv: /home/ubuntu/tcc/venv
 #     requirements: /home/ubuntu/tcc/requirements.txt

Obrigado @lucas e todo o time !