我之前从未做过身份验证,但希望能够通过openID跟踪和验证用户身份.我看到了一些允许使用WSGI进行openID身份验证的模块,但是所有模块都是旧的,没有提到python3,所以我猜它们不起作用.
我想知道如何在WSGI和python3中处理/验证openID.一个简单的实现将不胜感激.
正如我在标题上所说,我现在对基本了解它们感到非常不舒服.
据我所知,mod_wsgi实现了可以在Apache Web服务器下运行的WSGI规范.
它用C语言编写.
另外一个,werkzeug是一种具有实用功能的工具包.我还评论过werkzeug可以运行在其源代码中实现的简单服务(serve.server在serve.py中).我知道werkzeug具有有用的功能和简单的服务器功能.
我想知道的是下面的内容.
当在Apache Web服务器下使用基于werkzeug的Flask框架时,mod_wsgi到底做了什么?
werkzeug还具有基本的http服务器功能,不需要支持mod_wsgi.
任何人都可以解释mod_wsgi和werkzeug之间的区别吗?
mod_wsgi和werkzeug从Web服务器的角度来看具有重复的功能.
我在mod_wsgi上运行烧瓶.我的烧瓶应用程序,它正在/var/www/app接收来自用户的一些文件并将其保存到/var/www/app/tmp目录.然而,即使在所有chmod和chown(认为这是一个权限问题)之后,我也无法访问该tmp目录.
经过一些调试后,我发现烧瓶应用程序的当前工作目录是/.我可以通过更改工作目录os.chdir('/var/www/'),但出于安全考虑,我想避免这样做.
这是我的apache配置:
<VirtualHost *:80>
ServerName mysite.com
ServerAlias site.com
ServerAdmin admin@localhost
WSGIDaemonProcess app user=www-data group=www-data processes=1
WSGIScriptAlias / /var/www/app.wsgi
Alias /static /var/www/app/static
<Directory /var/www/app>
WSGIProcessGroup app
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Order deny,allow
Allow from all
</Directory>
<Location "/static">
SetHandler None
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
如何将应用程序的工作目录更改/为/var/www?
我正在尝试使用Apache和mod_wsgi运行Bottle.py.
我在Windows上运行它,使用xampp.python v2.7
我在httpd中的Apache配置:
<VirtualHost *>
ServerName example.com
WSGIScriptAlias / C:\xampp\htdocs\GetXPathsProject\app.wsgi
<Directory C:\xampp\htdocs\GetXPathsProject>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我的app.wsgi代码:
import os
os.chdir(os.path.dirname(__file__))
import bottle
application = bottle.default_app()
Run Code Online (Sandbox Code Playgroud)
我的hello.py:
from bottle import route
@route('/hello')
def hello():
return "Hello World!"
Run Code Online (Sandbox Code Playgroud)
当我去的时候,localhost/hello我收到404错误.我在Apache日志文件中没有任何其他错误,可能缺少基本的东西.
我试图用mod_wsgi而不是mod_python(RHEL 5)运行我的Django站点.我尝试了所有我的网站,但遇到了同样的问题.我按照每个人推荐的标准方式配置它,但对网站的请求只是超时.
Apache conf:
<VirtualHost 74.54.144.34>
DocumentRoot /wwwclients/thymeandagain
ServerName thymeandagain4corners.com
ServerAlias www.thymeandagain4corners.com
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/httpd/thymeandagain_access_log combined
ErrorLog /var/log/httpd/thymeandagain_error_log
LogLevel error
WSGIScriptAlias / /wwwclients/thymeandagain/wsgi_handler.py
WSGIDaemonProcess thymeandagain user=admin group=admin processes=1 threads=16
WSGIProcessGroup thymeandagain
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
wsgi_handler.py:
import sys
import os
sys.path.append("/wwwclients")
os.environ['DJANGO_SETTINGS_MODULE'] = 'thymeandagain.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)
守护进程mod_wsgi应该产生不存在,所以请求只是超时,我在日志中得到了一堆"无法连接到WSGI守护程序进程"错误.有没有关于WSGIDaemonProcess指令阻止创建守护进程的东西?在此先感谢任何帮助......
编辑:我在错误日志中得到这个:
[WARN@1227228322.174175] mcm_server_readable():2582: timeout: Operation now in progress: select(2) call timed out for read(2)able fds
[INFO@1227228322.174263] mcm_get_line():1592
[WARN@1227227903.249626] mcm_server_readable():2582: timeout: Operation now in …Run Code Online (Sandbox Code Playgroud) 我有django像这样运行WSGI:
<VirtualHost *:80>
WSGIScriptAlias / /home/ptarjan/django/django.wsgi
WSGIDaemonProcess ptarjan processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup ptarjan
Alias /media /home/ptarjan/django/mysite/media/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但如果在python我做:
def handler(request) :
data = urllib2.urlopen("http://example.com/really/unresponsive/url").read()
Run Code Online (Sandbox Code Playgroud)
整个apache服务器挂起并且没有响应此回溯
#0 0x00007ffe3602a570 in __read_nocancel () from /lib/libpthread.so.0
#1 0x00007ffe36251d1c in apr_file_read () from /usr/lib/libapr-1.so.0
#2 0x00007ffe364778b5 in ?? () from /usr/lib/libaprutil-1.so.0
#3 0x0000000000440ec2 in ?? ()
#4 0x00000000004412ae in ap_scan_script_header_err_core ()
#5 0x00007ffe2a2fe512 in ?? () from /usr/lib/apache2/modules/mod_wsgi.so
#6 0x00007ffe2a2f9bdd in ?? () from /usr/lib/apache2/modules/mod_wsgi.so
#7 0x000000000043b623 in ap_run_handler ()
#8 0x000000000043eb4f in ap_invoke_handler () …Run Code Online (Sandbox Code Playgroud) 用于通过使用python subprocess.Popen制作一些shell命令的django应用程序不再起作用,因为我升级到ubuntu到11.10
为了简化问题,我将错误的代码放入wsgi脚本:
import os
import sys
from subprocess import Popen,PIPE
p=Popen(['/usr/bin/id'],stdout=PIPE,stderr=PIPE)
comm=p.communicate()
print comm,p.returncode
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)
如果我直接通过python运行这段代码,它可以工作:
$ python -V
Python 2.7.2+
$ python django_wsgi.py
('uid=1002(www) gid=1002(www) groups=1002(www)\n', '') 0
Run Code Online (Sandbox Code Playgroud)
如果我通过apache运行此代码(我只是将相关的URL放入浏览器),在apache日志中,我得到:
[Tue Nov 29 11:34:38 2011] [error] ('', '') -6
Run Code Online (Sandbox Code Playgroud)
这个错误是什么'-6'???
问题是,使用我的开发服务器(Ubuntu 10.04,几乎相同的apache/wsgi版本,相同的apache配置文件,相同的环境变量,但使用python 2.6.5),它运行良好:
[Tue Nov 29 11:29:10 2011] [error] ('uid=1000(www) gid=1000(www) groups=1000(www)\\n', '') 0
Run Code Online (Sandbox Code Playgroud)
你知道为什么Popen不再用python 2.7通过apache工作了吗?
我有一个Web应用程序,除其他外,将查询数据库并使用数据创建Excel电子表格.在将文件发送到客户端计算机之前,我需要将电子表格保存到服务器的磁盘.我正在使用Flask框架和openpyxl来生成电子表格.在Flask的开发服务器上运行时,一切正常,但真正的服务器是带有WSGI的Apache2.当我在那里运行时,在尝试保存电子表格时会引发"权限被拒绝"错误.我不知道在Apache/WSGI中运行时Python的工作目录是什么.
有没有办法,可能在WSGI配置文件中,更改工作目录,或以某种方式控制它将保存到哪里?如果可能的话,我想使用相对路径进行保存(它使代码更具可移植性),这就是更改工作目录是最佳解决方案的原因.
我有一个使用 Gunicorn 和 nginx 运行的 Flask 应用程序。但是,如果我更改数据库中的值,在某些情况下应用程序将无法在浏览器中更新。
我有一个包含以下命令的烧瓶脚本
from msldata import app, db, models
path = os.path.dirname(os.path.abspath(__file__))
manager = Manager(app)
@manager.command
def run_dev():
app.debug = True
if os.environ.get('PROFILE'):
from werkzeug.contrib.profiler import ProfilerMiddleware
app.config['PROFILE'] = True
app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[30])
if 'LISTEN_PORT' in app.config:
port = app.config['LISTEN_PORT']
else:
port = 5000
print app.config
app.run('0.0.0.0', port=port)
print app.config
@manager.command
def run_server():
from gunicorn.app.base import Application
from gunicorn.six import iteritems
# workers = multiprocessing.cpu_count() * 2 + 1
workers = 1
options = …Run Code Online (Sandbox Code Playgroud) 几天前,我决定将 python 从 2.7 版更新到 3.7 版。这是我目前的设置:
Ubuntu 16.04
Python 3.7.7
Django 3.0.6
Apache/2.4.18
Run Code Online (Sandbox Code Playgroud)
使用命令python -m venv --system-site-packages /var/www/path/to/myenv我创建了虚拟环境,在激活这个环境后我创建了一个新项目。环境/var/www/path/to/myenv路径如下所示,项目路径如下所示/var/www/path/to/myenv/myproject。配置myproject.conf看起来像这样:
<VirtualHost *:80>
ServerName myproject.com
ServerAlias www.myproject.com
WSGIDaemonProcess myproject processes=2 threads=15 display-name=%{GROUP} python-home=/var/www/path/to/myenv python-path=/var/www/path/to/myenv/myproject
WSGIProcessGroup candyhand
WSGIScriptAlias / /var/www/path/to/myenv/myproject/myproject/wsgi.py
<Directory /var/www/path/to/myenv/myproject/myproject/>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory /var/www/path/to/myenv/myproject/>
Require all granted
</Directory>
CustomLog /var/www/path/to/myenv/myproject/logs/apache_access.log combined
ErrorLog /var/www/path/to/myenv/myproject/logs/apache_error.log
Alias /static/ /var/www/path/to/myenv/myproject/static/
<Directory /var/www/path/to/myenv/myproject/>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Require all granted
</Directory> …Run Code Online (Sandbox Code Playgroud)