uwsgi.ini configuração para aplicativos python

6

Então estou experimentando o uWSGI e gostando muito dele.

Eu tenho uma pergunta sobre o uso de seu arquivo .ini.

É possível calcular valores para seu parâmetro de configuração .ini dinamicamente?

Por exemplo, para o valor "chdir" no meu arquivo "uwsgi.ini", tenho

[uwsgi]
socket=127.0.0.1:3034
chdir=/Users/calvin/work/myproject
virtualenv=/Users/calvin/.virtualenvs/myproject
module=django.core.handlers.wsgi:WSGIHandler()
env= DJANGO_SETTINGS_MODULE=myproject.settings
master=True
pidfile=/tmp/myproject-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/myproject.log

É um grande incômodo ter que escrever 3 arquivos .ini separados para minha "máquina local", meu servidor de "desenvolvimento / teste" e meu "servidor de produção". Sem mencionar que o valor chdir da máquina local de um colega será completamente diferente.

Eu tentei usar import os e os.join.path para calcular o valor chdir dinamicamente, mas isso não funciona, o que é esperado, já que o uwsgi não possui um interpretador python?

    
por Calvin Cheng 26.07.2012 / 09:57

3 respostas

9

Eu mesmo encontrei a resposta depois de pesquisar um pouco sobre os documentos da uwsgi.

Referência, link , podemos especificar a lógica de configuração e calcular dinamicamente os caminhos, fazendo uso de variáveis de ambiente, enquanto em um virtualenv python.

Portanto, supondo que eu esteja atualmente em meu myproject virtualenv, minha configuração .ini calculará automaticamente meus caminhos para as opções de configuração chdir e virtualenv .ini da seguinte forma:

[uwsgi]

if-env = PROJECT_HOME
print = Your path is %(_)/myproject
chdir = %(_)/myproject
endif =

if-env = VIRTUAL_ENV
print = Your virtualenv is %(_)
virtualenv = %(_)
endif = 

socket=127.0.0.1:3034
module=django.core.handlers.wsgi:WSGIHandler()
env= DJANGO_SETTINGS_MODULE=bbox.settings
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log

A instrução print é opcional, é claro, mas isso dá ao binário uwsgi os valores para chdir e virtualenv que ele está esperando.

Algo parecido com isto:

calvin$ uwsgi --ini myproject/uwsgi.ini 
[uWSGI] getting INI configuration from myproject/uwsgi.ini
Your path is /Users/calvin/work/myproject
Your virtualenv is /Users/calvin/.virtualenvs/myproject
*** Starting uWSGI 1.2.4 (64bit) on [Thu Jul 26 17:00:04 2012] ***
compiled with version: 4.2.1 Compatible Apple Clang 3.1 (tags/Apple/clang-318.0.61) on 25 July 2012 20:06:56
detected number of CPU cores: 8

As instruções de impressão são desnecessárias no seu arquivo .ini final, é claro. Estou apenas colocando-os lá para imprimir as informações necessárias que confirmam que meus caminhos são calculados dinamicamente no arquivo .ini.

    
por 26.07.2012 / 11:06
1

Com base na resposta dada por Calvin, com o uso de o '@' mágica pode-se ter mais flexibilidade em relação às configurações dinâmicas.

O @(exec://...) pode ser útil, por exemplo, para avaliar os comandos bash. No meu caso, me permitiu definir: %código% O que eu estava procurando desde que eu tinha symlinked esta configuração de outro diretório.

    
por 24.04.2017 / 18:41
0

Não tenho certeza se é uma boa prática rodar versões de desenvolvimento e produção com arquivos de configuração diferentes - isso é tipicamente uma forma de problemas "estranhos" que não aparecem na versão dev (devido a diferentes permissões de arquivo ou qualquer outra coisa). Muito melhor é fazer algo como make install e sempre trabalhar com configuração semelhante à produção. Ou, você pode apenas vincular suas fontes ao diretório do projeto no seu homedir para editá-las no local. Mas, novamente, sua configuração é única.

    
por 02.09.2015 / 23:42

Tags