Používání CherryPy / Cherryd ke spuštění více instancí baňky

hlasů
9

Za návrhy, SO / SF a dalších lokalit, já používám CherryPy jako WSGI serveru spustit více instancí webového serveru Python I postaven s baňky. Každá instance běží na svém vlastním portu a sedí za Nginx. Musím poznamenat, že pod není práce pro mě, ale já jsem trápí, že jsem jít o věci špatným směrem a funguje to „náhodou“.

Tady je můj současný cherrypy.conf file:

[global]
server.socket_host = '0.0.0.0'
server.socket_port = 8891
request.dispatch: cherrypy.dispatch.MethodDispatcher()
tree.mount = {'/':my_flask_server.app}

Bez potápění příliš daleko do mého baňky serveru, zde je návod, jak to začíná:

import flask
app = flask.Flask(__name__)

@app.route('/')
def hello_world():
    return hello

A tady je příkaz I vydat na příkazovém řádku zahájit s Cherryd:

cherryd -c cherrypy.conf -i my_flask_server

Otázky jsou:

  1. Je balení baňky uvnitř CherryPy stále preferovaný způsob použití baňky ve výrobě? https://stackoverflow.com/questions/4884541/cherrypy-vs-flask-werkzeug

  2. Je to správný způsob, jak použít soubor .conf zahájit CherryPy a importovat baňky aplikaci? Jsem prohledali dokumentaci CherryPy, ale nemohu najít žádné případy použití, které odpovídají tomu, co se snažím dělat zde konkrétně.

  3. Je správný způsob, jak spustit více instancí CherryPy / baňky na jednom stroji vykonat více příkazů cherryd (daemonizing s -d, etc) s unikátními .conf souborů pro každý port, které mají být použity (8891, 8892, atd)? Nebo je tam lepší „CherryPy“ způsob, jak toho dosáhnout?

Díky za každou pomoc a pochopení.

Položena 12/05/2011 v 19:29
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
5

Nemohu mluvit za Baňka, ale mohu pro CherryPy. Že vypadá jako „správným způsobem“ ... většinou. Ta linka o MethodDispatcher je no-op, protože to má vliv pouze CherryPy aplikací, a nezdá se, že byl připojen žádný (pouze jeden Flask app místo).

Co se týče bodu 3, to máte pravdu. CherryPy umožňuje spustit více objektů serveru ve stejném procesu, aby se poslouchat na více portů (nebo protokoly), ale to nemá žádný cukr pro spouštění více procesů. Jak říkáte, příkazy multiple cherryd s různou konfigurační soubory je, jak na to (pokud chcete použít více integrované správy clusteru / config nástroj, jako je eggmonster ).

Odpovězeno 13/05/2011 v 07:17
zdroj uživatelem

hlasů
2

Terminologie: Montáž vs Narůstání

V zásadě se jedná o správný způsob, jak sloužit baňky aplikací prostřednictvím CherryPy, jen krátká poznámka na své pojmenování:

Stojí za zmínku, že zde tree.mountnení konfigurační klíč sám o sobě - treepovede k cherrypy._cpconfig._tree_config_handler(k, v)volána s argumenty 'mount', {'/': my_flask_server.app}.

Klíčovým parametrem je nepoužívá vůbec By the _tree_config_handlertakže v config „mount“ je jen libovolný štítek pro danou dict mapování cest. To také nemá „mount“ aplikace (to není CherryPy app po tom všem). Tím mám na mysli, to není cherrypy.tree.mount(…)to, ale spíše cherrypy.tree.graftto libovolná WSGI psovod do svého „script-name“ (cestami, ale v CherryPy terminologie) názvů.

CherryPy deník zpráva poněkud mylně říká, že „Mounted <app jako řetězec> on /“]

To je poněkud důležitý bod, protože se štěpem, na rozdíl od držáku, nelze zadat další možnosti, jako je statické spisové služby pro vaši aplikaci nebo streamování odpovědí na této cestě.

Takže bych doporučil změnit tree.mountkonfigurační klíč k něčemu popisné že nezve čtení příliš mnoho sémantiku o tom, co se děje uvnitř CherryPy (protože tam jecherrypy.tree.mount metoda) v důsledku tohoto config. Například, tree.flask_app_namepokud jste právě mapování, že jedna aplikace v tomto dict (tam může být mnoho treesměrnic, všechny z nich teprve sloučeny do tras namespace), nebo tree.wsgi_delegatespokud se mapa mnoho aplikací v tomto dict.

Používání CherryPy sloužit dodatečný obsah, aniž by aplikace z toho

Další poznámka po straně, pokud chcete, aby CherryPy například poskytovat statických souborů služby pro vaši aplikaci, nemáte vytvořit standardizovaný CherryPy aplikaci držet tuto konfiguraci. Musíte jen namontovat Nones příslušnou dodatečnou config. Tyto soubory by stačilo mít CherryPy sloužit statického obsahu z podadresáře ‚statické‘ v případě, že jsou vloženy do adresáře, kam jste zahájit cherryd sloužit statický obsah (odvolávat cherryd as cherryd -c cherrypy.conf -i my_flask_server -i static:

static.py

import cherrypy
# next line could also have config as an inline dict, but
# file config is often easier to handle
cherrypy.tree.mount(None, '/static-path', 'static.conf')

static.conf

# static.conf
[/]
tools.staticdir.on = True
tools.staticdir.root = os.getcwd()
tools.staticdir.dir = 'static'
tools.staticdir.index = 'index.html'
Odpovězeno 23/05/2013 v 09:39
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more