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:
[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:
#!/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 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): 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('/' if os_name != 'posix' else '/whichsub/') 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...