2011-08-05 29 views
6

Nginx'i yerel olarak kurmanız ve çalıştırmanız gerekmeden webpy statik dizinini değiştirmeyi çok isterim. Şu anda, webpy sadece/statik/varsa statik bir dizin oluşturacaktır. Benim durumumda, statik dizinim olarak/foo/bar/kullanmak istiyorum, ancak bunu yapılandırmakla ilgili herhangi bir bilgi bulamadı (apache veya nginx'i yerel olarak çalıştırmak dışında).Webpy'de statik dizin yolunu değiştirme

Bu, yalnızca yerel kullanım içindir, üretim amaçlı değil. Herhangi bir fikir? Teşekkür

cevap

5

o zaman (PATH_INFO değiştirerek StaticApp o hileler) web.httpserver.StaticMiddleware alt sınıfı veya böyle Kendi orta yazabilirsiniz aynı yolu için farklı bir dizin olması gerekiyorsa:

import web 
import os 
import urllib 
import posixpath 

urls = ("/.*", "hello") 
app = web.application(urls, globals()) 

class hello: 
    def GET(self): 
     return 'Hello, world!' 


class StaticMiddleware: 
    """WSGI middleware for serving static files.""" 
    def __init__(self, app, prefix='/static/', root_path='/foo/bar/'): 
     self.app = app 
     self.prefix = prefix 
     self.root_path = root_path 

    def __call__(self, environ, start_response): 
     path = environ.get('PATH_INFO', '') 
     path = self.normpath(path) 

     if path.startswith(self.prefix): 
      environ["PATH_INFO"] = os.path.join(self.root_path, web.lstrips(path, self.prefix)) 
      return web.httpserver.StaticApp(environ, start_response) 
     else: 
      return self.app(environ, start_response) 

    def normpath(self, path): 
     path2 = posixpath.normpath(urllib.unquote(path)) 
     if path.endswith("/"): 
      path2 += "/" 
     return path2 


if __name__ == "__main__": 
    wsgifunc = app.wsgifunc() 
    wsgifunc = StaticMiddleware(wsgifunc) 
    wsgifunc = web.httpserver.LogMiddleware(wsgifunc) 
    server = web.httpserver.WSGIServer(("0.0.0.0", 8080), wsgifunc) 
    print "http://%s:%d/" % ("0.0.0.0", 8080) 
    try: 
     server.start() 
    except KeyboardInterrupt: 
     server.stop() 

Yada "Statik" adlı sembolik link oluşturabilir ve başka bir dizine yönlendirebilir.

+0

Teşekkürler! AttributeError: 'module' nesnesinin 'StaticMiddleware' özelliği yok –

+0

Baskı web .__ version__' çıktısı nedir? Python 2.6.1 ve web.py 0.36 ile çalışır. –

+0

Ah, 0.32 yaşıyorum. 0.36'ya yükselttim ve işe yarıyor, ancak ihtiyacım olan şey% 100 değil./Static/to/foo/static/ile eşleştirmem gerekiyor. Yardım için teşekkürler! –