我可以问你一个关于在Windows上移植mod_wsgi的托管烧瓶应用程序的问题
我有两个烧瓶应用程序,由于导入冲突,一个只能同时存活一次
即: 如果有申请1我有回应 然后,如果我请求应用程序2,我有内部服务器错误,日志中有错误... 然后,如果我重新启动apache并请求应用程序2,我将收到响应,但是如果我请求应用程序1,我将具有相同的内部服务器错误 如果我评论一些导入,例如numpy,则两个应用程序都可以同时存在
如果您对这个问题有任何想法,链接或答案,对您有帮助吗?
我的安装说明如下
提前感谢您的游览时间和您的作品
亚历山大(Alexandre)
错误日志
mod_wsgi(pid = 4936):无法执行Python脚本文件'D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi'。
mod_wsgi(pid = 4936):处理WSGI脚本'D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi'时发生异常。
追溯(最近一次通话):
中的文件“ D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi”第3行
从api_test_2导入应用程序作为应用程序
中的文件“ D:/ exec / wsgi_api / api_test_2 \ api_test_2.py”,第2行
导入numpy
中的文件“ c:\ python \ python36 \ lib \ site-packages \ numpy \ __ init__.py”,第142行
来自。导入核心
中的第16行的文件“ c:\ python \ python36 \ lib \ site-packages \ numpy \ core \ __ init__.py”
来自。导入多数组
中的文件“ c:\ python \ python36 \ lib \ site-packages \ numpy \ core \ multiarray.py”,第12行
来自。导入替代
中的文件“ c:\ python \ python36 \ lib \ site-packages \ numpy \ core \ overrides.py”,第46行
“”“)
RuntimeError:implement_array_function方法已具有文档字符串
#---------------------------------
# file : D:/exec/wsgi_api/api_test_1/api_test_1.py
#---------------------------------
from flask import Flask, jsonify,render_template, request, make_response
import numpy
app = Flask(__name__)
@app.route('/')
def home():
resp = make_response("hello from 1", 200)
resp.headers['Content-Type'] = 'charset=utf-8'
return resp
#---------------------------------
#---------------------------------
# file : D:/exec/wsgi_api/api_test_2/api_test_2.py
#---------------------------------
from flask import Flask, jsonify,render_template, request, make_response
import numpy
app = Flask(__name__)
@app.route('/')
def home():
resp = make_response("hello from 2", 200)
resp.headers['Content-Type'] = 'charset=utf-8'
return resp
if __name__ == '__main__':
app.run(host='127.0.0.1', port=36000)
#---------------------------------
我在appache httpdocs中有这两个wsgi文件
#---------------------------------
# file : D:/exec/Apache24/htdocs/wsgi/api_test_1.wsgi
#---------------------------------
import sys
sys.path.append('D:/exec/wsgi_api/api_test_1/')
from api_test_1 import app as application
#---------------------------------
#---------------------------------
# file : D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi
#---------------------------------
import sys
sys.path.append('D:/exec/wsgi_api/api_test_1/')
from api_test_1 import app as application
#---------------------------------
#---------------------------------
In D:/exec/Apache24/conf/httpd.conf i add the line
#---------------------------------
WSGIScriptAlias /api_test_1 "D:/exec/Apache24/htdocs/wsgi/api_test_1.wsgi"
WSGIScriptAlias /api_test_2 "D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi"
#---------------------------------
答案 0 :(得分:1)
非常感谢您的回复。
我在mod_wsgi邮件列表上进行了讨论,并且得到了相同的答复。解释是numpy在Python子解释器中不起作用,因为C扩展模块无法正确实现,因此对于mod_wsgi,您只能使用在主要解释程序上下文中为numpy,由“ WSGIApplicationGroup%{GLOBAL}”指令强制执行
这与主题https://github.com/numpy/numpy/issues/3961
相关联感谢所有帮助我的人,特别是科迪·格雷和格雷厄姆·邓普尔顿
亲切问候
Alx
答案 1 :(得分:0)
尝试将其放入您的WSGI配置文件中:
single-interpreter = true
答案 2 :(得分:0)
我在一个项目中遇到了类似的问题。就我而言,我必须在网站的WSGIApplicationGroup %{GLOBAL}
文件中添加.conf
。
这是我在其中找到信息的文档:
https://modwsgi.readthedocs.io/en/develop/user-guides/checking-your-installation.html#sub-interpreter-being-used
答案 3 :(得分:0)
这对我有用
我在apache配置文件中添加了WSGIApplicationGroup%{GLOBAL},该文件位于启用了站点的文件夹中。