2016-04-10 12 views
1

DB uygulamasında bir günlüğümde oturum açmak ve yanıtta statik bir HTML dosyasına hizmet vermek istediğim, flask uygulamamda bir bitiş noktası var. bitiş noktası aşağıdaki gibidir:Bazı DB işlemlerini gerçekleştirirken Flask'ta Statik HTML Sunma

@app.route("/man/<os>/<section>/<name>") 

farklı HTML dosyaları binlerce var ve bunlardan biri iade edilmesi gereken URL bağlıdır. Nginx'i tüm statik dosyaları sunmak için yapılandırdım. Ama DB günlüğü yapıyor, Flask bu URL'leri işleme ve istekleri modülü aracılığıyla HTML dosyasını akışı am Bu Nginx iki isteklerle sonuçlanır edilir

host = request.host 
    path = 'man_pages/' + os + '/html' + section + '/' + name + '.html' 
    url = 'http://' + host + url_for('static', filename=path) #TODO don't hardcode the scheme 
    req = requests.get(url, stream=True) 
    return Response(stream_with_context(req.iter_content()), content_type=req.headers['content-type']) 

(aşağıya bakınız), benim yok Bunun, bunu yapmanın en etkili yöntemi olduğuna inan. Flask uygulamasında DB'de günlüğe kaydetme yapmanın ve sonra statik HTML dosyasını sunmak için Nginx'i kullanmanın bir yolu var mı?

cevap

2

Evet, sadece bir istek ile yapmak mümkündür.

Diğer web sunucuları, üstbilgisine sahiptir ve Flask, bunun için yerleşik bir desteğe sahiptir.

Nginx bu üstbilgiyi desteklemiyor, X-Accel-Redirect numaralı telefona sahip. Ne yazık ki, bunu desteklemek ve FlaskX-Accel-Redirect başlığını döndürmek için nginx rotasını yapılandırmanız gerekir.

xsendfile'a bir göz atın, bu sizin için yararlı olabileceğini düşünüyorum.

Size tam bir çözüm vermiyorum çünkü sadece bir ipucu ve X-Accel-Redirect başlığı hakkında bazı işaretçiler gerektiğini düşünüyorum.

Bazı diğer yararlı kaynaklar:

https://gist.github.com/jessejlt/1306827

http://www.mli.gmu.edu/toz/wordpress/2014/07/31/serving-files-with-flask-behind-nginx-gunicorn/

+1

teşekkür ederiz. İşe yaradı :) –

İlgili konular