标签: wsgi

安装和启动CherryPy服务器脚本作为Windows服务(使用sc.exe)

我正在尝试安装并启动一个简单的CherryPy服务器作为Windows服务.

这是脚本:(删除了一些行来缩短它.当从命令行手动执行时它完全正常工作)

app = AdminMediaHandler(django.core.handlers.wsgi.WSGIHandler())
logged_app = TransLogger(app)
server = wsgiserver.CherryPyWSGIServer( ('127.0.0.1', 8632), logged_app, server_name='localhost', numthreads=20 )

try:
    server.start()
except KeyboardInterrupt:
    server.stop()
Run Code Online (Sandbox Code Playgroud)

我正在使用sc.exe安装和启动服务.安装顺利,但我似乎无法启动该服务.

使用的命令是:(注意路径中有空格,虽然我用双引号处理它,并且在binPath通过命令行手动执行其字符串时正在工作)

> sc.exe create "ServiceName" binPath= "\"C:\Path to Python\python.exe\" \"C:\Path to CherryPy Script\cherryserver.py\""

> sc.exe start "ServiceName"
Run Code Online (Sandbox Code Playgroud)

无论是尝试使用GUI sc.exe还是通过services.mscGUI 启动服务,我都会收到此错误:

[SC] StartService FAILED 1053:

The service did not respond to the start or control request in a timely fashion.
Run Code Online (Sandbox Code Playgroud)

据我所知,这是因为python.exe没有实现Windows服务API.

我不希望.exe使用py2exe从脚本创建一个.

我发现 …

python windows-services mod-wsgi wsgi cherrypy

0
推荐指数
1
解决办法
3916
查看次数

uWSGI,cherrypy和threading

前言:我想把这些问题分成小问题,但显然,我错过了一些难题,对我来说似乎不可能.

我使用cherrypy内置的WSGI服务器开发了我的樱桃应用程序.我天真地假设,到时候,我将能够使用创建的WSGI Application类并使用任何符合WSGI的服务器进行部署.

我使用这篇博文来创建我自己的(但非常相似)的cherrypy插件和工具,以便在http请求期间使用SQLAlchemy连接到数据库.

我希望任何服务器都能像Cherrypy的内置服务器一样工作:

  1. 主进程将产生X线程以满足X并发请求
  2. 我的引擎插件将使用连接池= X创建SQLalchemy引擎(因此任何请求都将具有其连接)
  3. 在请求到达时,我的工具将从池提供sql炼金术连接

此流程与uWSGI不匹配(只要我理解).

application.py在uWSGI配置中分配了我的.这个文件看起来像这样:

cherrypy.tools.db = DbConnectorTool()
cherrypy.engine.dbengine = DbEnginePlugin(cherrypy.engine, settings.database)
cherrypy.config.update({
    'engine.dbengine.on': True
})

from myapp.application import Application
root = Application(settings)
application = cherrypy.Application(root, script_name='', config=settings)
Run Code Online (Sandbox Code Playgroud)

我用这个application.py安装我的申请,建于当我开发和测试其服务器CherryPy的.

问题是uWSGI本身并没有创建任何线程,而且我的SQLAlchemy插件没有使用它,因为没有cherrypy.engine创建.

uWSGI是否支持使用线程为多个并发请求提供服务的线程?我能在我的网站上启动这些线程application.py吗?uWSGI会理解它并将这些线程用于并发请求吗?怎么能这样呢?我认为cherrypy可以以某种方式使用,或不?那我的SQLAlchemy插件怎么样,我cherrypy.engine只能在仅使用WSGI时启动cherrypy.Application

任何可以帮助我的帮助或信息将不胜感激.

编辑:

我的uWSGI配置:

<uwsgi>
    <socket>127.0.0.1:9001</socket>
    <master/>
    <daemonize>/var/log/uwsgi/app.log</daemonize>
    <logdate/>
    <threads/>
    <pidfile>/home/web/uwsgi.pid</pidfile>
    <uid>uwsgi</uid>
    <gid>uwsgi</gid>
    <workers>2</workers>
    <harakiri>90</harakiri>
    <harakiri-verbose/>
    <home>/home/web/</home>
    <pythonpath>/home/web/instance</pythonpath>
    <module>core.application</module>
    <no-orphans/>
    <touch-reload>/home/web/uwsgi-reload-web</touch-reload>
</uwsgi>
Run Code Online (Sandbox Code Playgroud)

python wsgi cherrypy uwsgi

0
推荐指数
1
解决办法
3254
查看次数

如何将wsgi.url_scheme设置为瓶中的https?

我想将所有请求重定向httphttps.

是否有一个通用的方法来设置wsgi.url_scheme,以https在Python 2.7瓶的应用程序?

该应用程序的一般结构是:

setup.py  // contains 'install_requires'  
wsgi  
 - myapplication.py  // the custom application containing bottle routes
Run Code Online (Sandbox Code Playgroud)

wsgi.url_scheme 似乎与环境变量有关:

http://wsgi.readthedocs.org/en/latest/definitions.html#envvar-wsgi.url_scheme

但我不确定如何实际"设置"环境变量https以及是否可以在setup.pymyapplication.py文件中完成.

这里有一段代码:

https://github.com/defnull/bottle/issues/347

def i_am_https_dammit(app):
    def https_app(environ, start_response):
        environ['wsgi.url_scheme'] = 'https'
        return app(environ, start_response)
    return https_app
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何实现这个要点,因为我对应用程序的调用是来自软木塞而且只是使用:

application=default_app()  
session_opts = {
    'session.cookie_expires': True,
    'session.encrypt_key': 'please use a random key and keep it secret!',
    'session.httponly': True,
    'session.timeout': 3600 * 24,  # 1 day
    'session.type': …
Run Code Online (Sandbox Code Playgroud)

https wsgi bottle python-2.7 openshift

0
推荐指数
1
解决办法
2239
查看次数

如何将 CGI 转换为 WSGI?

我继承了一个使用 CGI 脚本的代码库。据我所知,它们效率很低,因为每次收到请求时它们都会分叉一个新进程。我目前正在尝试将它们转换为 WSGI,但我对以下内容感到困惑:

  1. WSGI 和 CGI​​ 在代码方面有何不同?我知道该应用程序必须是可调用的,但除此之外,我不确定还需要做什么来更改它。

  2. 我如何衡量我所看到的效率提升随着变化而明显的变化?

其他可能有用的信息是我将使用 Apache 和 mod_wsgi。

如果我可以提供任何其他信息,请告诉我。

python apache cgi mod-wsgi wsgi

0
推荐指数
1
解决办法
1229
查看次数

类型错误:需要类似字节的对象,而不是“str”WSGI 服务器

我无法使用 Python 3.5 解决这个问题。此代码对于 3 之前的 Python 来说是可以的。我正在实现 Django 应用程序所需的 WSGI Web 服务器。

文件的名称是:webserver2.py。但他告诉我

TypeError: a bytes-like object is required, not 'str'
Run Code Online (Sandbox Code Playgroud)

你能帮助我吗?

import socket
#import StringIO
import io
import sys


class WSGIServer(object):
    address_family = socket.AF_INET
    socket_type = socket.SOCK_STREAM
    request_queue_size = 1

    def __init__(self, server_address):
        # Create a listening socket
        self.listen_socket = listen_socket = socket.socket(
            self.address_family,
            self.socket_type
        )
        # Allow to reuse the same address
        listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        # Bind
        listen_socket.bind(server_address)
        # Activate
        listen_socket.listen(self.request_queue_size)
        # Get server host name and …
Run Code Online (Sandbox Code Playgroud)

python wsgi wsgiserver

0
推荐指数
1
解决办法
2628
查看次数

从哪里获取 mod_wsgi.so 文件

我必须安装mod_wsgi在 Apache 2.4 中。我在过去两个小时内搜索了该mod_wsgi.so文件,但什么也没找到。

在哪里可以找到 Windows 上适用于 Python 3.6 的 Apache 2.4 的此文件?

我尝试自己编译它,但出现一些错误。系统不能包含 ap_config.h ...

python mod-wsgi wsgi apache2

0
推荐指数
1
解决办法
1万
查看次数

使用 C# 客户端缺少授权标头

我正在使用django-rest-framework. 对于授权,我选择使用令牌授权(而不是 JWT)。以下是我尝试过的:

使用邮递员(作品)

headers: 
Authorization: Token 329367424fd30a876ccff05dbc5a18d86fe7158c
Run Code Online (Sandbox Code Playgroud)

使用 C# 客户端(不起作用)

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Token 329367424fd30a876ccff05dbc5a18d86fe7158c");
await client.GetAsync(<url>)

// Authentication credentials were not provided.
Run Code Online (Sandbox Code Playgroud)

在我调试和覆盖TokenAuthentication函数后,我意识到Authorization headers如果客户端请求,该函数将被删除C#

编辑

实际上我尝试过使用 Javascript 并且它也有效,我认为问题是 C# HttpClient

我试过

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization3", $"token {token}");
client.DefaultRequestHeaders.Add("Authorization", $"token {token}");
Run Code Online (Sandbox Code Playgroud)

Authorization在 python 中调试函数,我发现只Authorization3发送到服务器而Authorization不是

在此输入图像描述

c# django wsgi gunicorn django-rest-framework

0
推荐指数
1
解决办法
2881
查看次数

Python代码可以通过终端正常工作,但不能通过wsgi脚本工作.(TypeError:'NoneType'对象不可迭代)

完整脚本:

import pprint

def application(environ, start_response):
    start_response('200 OK', [('content-type', 'text/html')])
    aaa = ['a','b','c']
    pprint.pprint(aaa)
Run Code Online (Sandbox Code Playgroud)

如果我要在终端上运行它,那就是......

>>> import pprint
>>> aaa = ['a','b','c']
>>> pprint.pprint(aaa)
['a', 'b', 'c']
>>> 
Run Code Online (Sandbox Code Playgroud)

你可以看到它工作正常.但是通过wsgi-script它不起作用.

error_log中:

TypeError:'NoneType'对象不可迭代

BTW是"pprint"PHP中的"print_r()"等价?

python mod-wsgi wsgi python-2.7 python-3.x

-1
推荐指数
1
解决办法
842
查看次数