Especificando virtualenv corretamente em uwsgi.conf

4

Estou tentando fazer com que um ambiente uwsgi funcione corretamente no Arch, para executar meu aplicativo Flask a partir de um virtualenv.

Eu instalei o uwsgi, o nginx e o virtualenv e todos eles funcionam em um ponto.

No entanto, estou vendo o seguinte erro no uwsgi log:

Traceback (most recent call last):
  File "./interface.py", line 1, in <module>
    from flask import flask
ImportError: No module named flask
unable to load app 0 (mountpoint='') (callable not found or import error)
unable to find "application" callable in file index.py
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 4795)
spawned uWSGI worker 1 (pid: 4796, cores: 1)
--- no python application found, check your startup logs for errors ---
[pid: 4796|app: -1|req: -1/1] 192.168.9.201 () {40 vars in 664 bytes} [Thu Dec 26 08:01:56 2013] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)

Isso indica que não é possível carregar o módulo do frasco, o que, acredito, se deve a um uwsgi.conf incorreto:

[uwsgi]
uid = http
gid = http
plugin = python2
socket = %drun/%n.sock
chdir = /srv/http/example/htdocs
master = True
pidfile = %drun/%n.pid
logto = %dlog/%n.log
venv = /srv/http/example/htdocs
pyhome = /srv/http/example/htdocs
module = interface
callable = my_app
no-site = true

Alguém pode me dizer o que eu deveria estar definindo venv e pyhome , como eu acho que é aí que está o problema? Ou, de fato, se eu deveria estar colocando os dois?

Também relevante, é quando eu executo o seguinte a partir de um terminal, posso importar o módulo do frasco sem erros:

$ pwd
/srv/http/example/htdocs
$ . bin/activate
(htdocs) $ python
Python 2.7.6 (default, Nov 26 2013, 12:52:49) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
>>> 

Estou apenas definindo venv em uwsgi.conf incorretamente?

    
por v25 27.12.2013 / 00:36

1 resposta

4

Você deve se livrar de no-site . Segundo a documentação:

Do not import the site module while initializing Python. This is usually only required for dynamic virtualenvs. If in doubt, do not enable.

Além disso, pyhome é um alias para venv , por isso é melhor livrar-se dele.

Apenas para referência futura, venv deve ser definido para a pasta de nível superior do seu virtualenv: /srv/http/example/htdocs

    
por 27.12.2013 / 00:47

Tags