Estou investigando como desenvolver um aplicativo Web decente com o Python. Como não quero que algumas estruturas de alta ordem entrem no meu caminho, minha escolha recaiu sobre a estrutura leve do Flask . O tempo dirá se essa foi a escolha certa.
Então, agora eu configurei um servidor Apache com mod_wsgi e meu site de teste está funcionando bem. No entanto, eu gostaria de acelerar a rotina de desenvolvimento, fazendo o site recarregar automaticamente após qualquer alteração nos arquivos py ou modelo que eu fizer. Vejo que qualquer alteração no arquivo .wsgi do site causa o recarregamento (mesmo sem o WSGIScriptReloading On no arquivo de configuração do apache), mas ainda preciso produzi-lo manualmente (por exemplo, inserir quebra de linha extra, salvar). Existe alguma maneira de causar a recarga quando edito alguns dos arquivos py do aplicativo? Ou, devo usar o IDE que atualiza o arquivo .wsgi para mim?
flask run
também funciona, pois quando vocêpip install flask
também instala um arquivo executável em um frasco navenv/bin/
pasta.Se você está falando sobre ambientes de teste / desenvolvimento, basta usar a opção de depuração. Ele recarregará automaticamente o aplicativo de balão quando ocorrer uma alteração de código.
Ou, a partir do shell:
http://flask.pocoo.org/docs/quickstart/#debug-mode
fonte
Em ambientes de teste / desenvolvimento
O depurador do werkzeug já possui uma função de 'recarga automática' disponível que pode ser ativada seguindo um destes procedimentos:
ou
Você também pode usar um arquivo de configuração separado para gerenciar toda a sua instalação, se necessário. Por exemplo, eu uso 'settings.py' com uma opção 'DEBUG = True'. A importação deste arquivo também é fácil;
No entanto, isso não é adequado para um ambiente de produção.
Ambiente de produção
Pessoalmente, escolhi o Nginx + uWSGI em vez do Apache + mod_wsgi por alguns motivos de desempenho, mas também pelas opções de configuração. O toque-recarregar opção permite especificar um arquivo / pasta que fará com que o aplicativo uWSGI recarregue seu aplicativo de balão recém-implantado.
Por exemplo, seu script de atualização baixa as alterações mais recentes e toca no arquivo 'reload_me.txt'. Seu script uWSGI ini (que é mantido pela Supervisord - obviamente) tem esta linha em algum lugar:
Eu espero que isso ajude!
fonte
.ini
arquivo de configuração uwsgi separado . Se você ler a documentação sobre "touch-reload", ela está na configuração uWSGI, não supervisor.app.run(debug=True)
falha, mas a configuração da variável ambiental funciona.Se você estiver usando o uwsgi, consulte a opção de recarregamento automático do python:
Exemplo uwsgi-dev-example.ini:
site_root / __ init__.py
Então corra:
Nota: Este exemplo também habilita o depurador.
Eu segui esse caminho para imitar a produção o mais próximo possível da minha configuração do nginx. Simplesmente executando o aplicativo de balão com o servidor da Web embutido atrás do nginx, resultaria em um erro de gateway incorreto.
fonte
Algumas atualizações para o Flask 1.0 e superior
a abordagem básica para recarregar a quente é:
FLASK_ENV=development
(nãoFLASK_DEBUG=1
)flask run --debugger
apenas para garantir que esteja ligadoFLASK_APP
eFLASK_ENV
se você tiver um.env
arquivo na raiz do projeto e tiver o python-dotenv instaladofonte
export FLASK_ENV=development
trabalhou para mim.app.run(debug=True)
parece não funcionar.Eu tive uma ideia diferente:
Primeiro:
Instale o
python-dotenv
módulo, que lerá a preferência local para o seu ambiente de projeto.Segundo:
Adicione um
.flaskenv
arquivo ao diretório do projeto. Adicione o seguinte código:Está feito!
Com esta configuração para o seu projeto Flask, quando você executar
flask run
e você verá esta saída no seu terminal:E quando você editar seu arquivo, salve a alteração. Você verá que o recarregamento automático existe para você:
Com mais explicações:
Claro que você pode bater manualmente
export FLASK_ENV=development
sempre que precisar. Mas usar um arquivo de configuração diferente para lidar com o ambiente de trabalho real parece ser uma solução melhor, por isso recomendo fortemente esse método que uso.fonte
FLASK_APP
variável no.flaskenv
arquivo.Aplicativos de balão podem opcionalmente ser executados no modo de depuração. Nesse modo, dois módulos muito convenientes do servidor de desenvolvimento chamados reloader e debugger são ativados por padrão. Quando o recarregador está ativado, o Flask observa todos os arquivos de código fonte do seu projeto e reinicia automaticamente o servidor quando qualquer um dos arquivos é modificado.
Por padrão, o modo de depuração está desativado. Para habilitá-lo, defina uma
FLASK_DEBUG=1
variável de ambiente antes de chamar o balãorun
:Ter um servidor em execução com o recarregador ativado é extremamente útil durante o desenvolvimento, porque toda vez que você modifica e salva um arquivo de origem, o servidor é reiniciado automaticamente e recebe a alteração.
fonte
Para conseguir isso no PyCharm, defina a seção 'Variáveis de ambiente' como:
Para o Flask 'configurações de execução / depuração'.
fonte
$ env: Flask_ENV = "MyAPP.py"
$ env: Flask_ENV = "desenvolvimento"
corrida de balão
Deve ser trabalhado
fonte