I was trying to create a simple flask web app at `/data/project/whichsub` but I can't run the webservice for it.
When I try to run it using `lighttpd` I get the following error in the `error.log` file:
```
2016-07-12 14:00:31: (log.c.166) server started
2016-07-12 14:00:31: (mod_fastcgi.c.1103) the fastcgi-backend /data/project/whichsub/www/python/src/app.py failed to start:
2016-07-12 14:00:31: (mod_fastcgi.c.1107) child exited with status 2 /data/project/whichsub/www/python/src/app.py
2016-07-12 14:00:31: (mod_fastcgi.c.1110) If you're trying to run your app as a FastCGI backend, make sure you're using the FastCGI-enabled version.
If this is PHP on Gentoo, add 'fastcgi' to the USE flags.
2016-07-12 14:00:31: (mod_fastcgi.c.1398) [ERROR]: spawning fcgi failed.
2016-07-12 14:00:31: (server.c.1021) Configuration of plugins failed. Going down.
[uWSGI] getting INI configuration from /data/project/whichsub/uwsgi.ini
```
My `.lighttpd.conf` file:
```
fastcgi.server += ( "/whichsub" =>
((
"socket" => "/tmp/whichsub-fcgi.sock",
"bin-path" => "/data/project/whichsub/www/python/src/app.py",
"check-local" => "disable",
"max-procs" => 1,
))
)
```
And when I try using the uwsgi-plain I get the following error in `uwsgi.log`:
```
.0-86-generic #131-Ubuntu SMP Thu May 12 23:33:13 UTC 2016
nodename: tools-webgrid-generic-1401
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /data/project/whichsub
detected binary path: /usr/bin/uwsgi-core
your processes number limit is 63706
your process address space limit is 4294967296 bytes (4096 MB)
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :40984 fd 3
uwsgi socket 1 bound to UNIX address /data/project/whichsub/whichsub.sock fd 4
Python version: 3.4.0 (default, Jun 19 2015, 14:24:19) [GCC 4.8.2]
PEP 405 virtualenv detected: /data/project/whichsub/www/python/venv
Set PythonHome to /data/project/whichsub/www/python/venv
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x1b1e850
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 363960 bytes (355 KB) for 4 cores
*** Operational MODE: preforking ***
Traceback (most recent call last):
File "./app.py", line 8, in <module>
from typing import List
ImportError: No module named 'typing'
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: 29044)
spawned uWSGI worker 1 (pid: 29048, cores: 1)
spawned uWSGI worker 2 (pid: 29049, cores: 1)
spawned uWSGI worker 3 (pid: 29050, cores: 1)
spawned uWSGI worker 4 (pid: 29051, cores: 1)
```
As the error indicates, my app is being run by python 3.4.0, but I need it to run with my virtual environment python which is 3.5.2.
My `uwsgi.ini` file:
```lang=ini
[uwsgi]
plugin = python3
socket = /data/project/whichsub/whichsub.sock
chdir = /data/project/whichsub/www/python/src
venv = /data/project/whichsub/www/python/venv
virtualenv = /data/project/whichsub/www/python/venv
module = app
callable = app
manage-script-name = true
```
My python app:
```lang=python
#!/data/project/whichsub/www/python/venv/bin/python
# -*- coding: utf-8 -*-
"""Find which subtemplates contain the given text."""
from os import name as os_name
from typing import List
from flask import Flask
from flask import request
from flask import render_template
import pywikibot as pwb
if os_name == 'posix':
from flup.server.fcgi import WSGIServer
app = Flask(__name__)
def find_sub_templates(lookingfor: str, page: pwb.Page) -> List[pwb.Page]:
found_templates = []
if lookingfor in page.text:
found_templates.append(template)
for sub_template in page.templates(content=True):
if lookingfor in sub_template.text:
found_templates.append(sub_template)
return found_templates
@app.route('/')
@app.route('/<path:path>')
def main():
code = request.args.get('code', 'en')
family = request.args.get('family', 'wikipedia')
pagetitle = request.args.get('pagetitle', '')
lookingfor = request.args.get('lookingfor', '')
site = pwb.Site(code, family)
try:
page = pwb.Page(site, pagetitle)
templates = find_sub_templates(lookingfor, page)
except ValueError:
templates = None
return render_template(
'main.html',
code=code,
family=family,
pagetitle=pagetitle,
lookingfor=lookingfor,
templates=templates,
)
if __name__ == '__main__':
if os_name == 'posix':
WSGIServer(app).run()
else:
app.run(debug=True)
```
I'm completely stuck at this point. Any help is appreciated. Feel free to ask any question.
If needed I would be happy to add you to the tool account...