python - bottle + gevent не может обслуживать статические файлы - PullRequest
2 голосов
/ 22 декабря 2011

Я использую бутылку с gevent для моих экспериментов на python webdev. Моя проблема в том, что я не могу обслуживать статические файлы, например использовать внешние CSS в моих шаблонах. Структура моих папок: / static / css / style.css

Мой код:

index.py

# -*- coding: UTF-8 -*-
from gevent import monkey; monkey.patch_all() #patching default Python threads
from bottle import mount, run, debug #initializing bottle
from routes import root #importing site routes
debug( True )
run( app = root , host = '0.0.0.0' , port = 80 , server = 'gevent' )

routes.py

# -*- coding: UTF-8 -*-
from bottle import *
root = Bottle()

@root.get('/static/<path:path>')
def serve_files( path ):
    return static_file( path , root = '/static/' )

Вот мой след от терминала:

xxx.xxx.xxx.xxx - - [2011-12-22 09:36:44] "GET /static/css/style.css HTTP/1.1" 500 161 0.002867
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gevent-0.13.6-py2.7-linux-i686.egg/gevent/pywsgi.py", line 438, in handle_one_response
    self.run_application()
  File "/usr/local/lib/python2.7/dist-packages/gevent-0.13.6-py2.7-linux-i686.egg/gevent/pywsgi.py", line 424, in run_application
    self.result = self.application(self.environ, self.start_response)
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.10.4-py2.7.egg/bottle.py", line 849, in __call__
    return self.wsgi(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.10.4-py2.7.egg/bottle.py", line 841, in wsgi
    % (html_escape(repr(_e())), html_escape(format_exc(10)))
NameError: global name '_e' is not defined

Пожалуйста, помогите.

UPDATE:

Я скачал нестабильную версию Bottle (версия 0.11) и импортировал ее в свой скрипт. Теперь нет 500 ошибок и трассировок, но style.css дает мне 404.

[2011-12-22 12:42:59] "GET /static/css/style.css HTTP/1.1" 404 122 0.000591

Ответы [ 2 ]

4 голосов
/ 25 декабря 2011

Ваш 404, потому что, вероятно, ваш корневой путь к статическим файлам неверен.

root='/static/' в порядке, только если у вас есть папка static в корневой файловой системе.Вероятно, это не то, что у вас есть на самом деле.Если у вас есть папка проекта и внутри этой папки у вас есть папка static, используйте root='./static/', и она будет работать нормально.

0 голосов
/ 18 июля 2018

Я знаю, что на это ответили, но если вы хотите что-то более ориентированное на производство, белый цвет - это круто.

from app import appRoute
from client import clientRoute
from main import mainRoute
from api import apiRoute
from beaker.middleware import SessionMiddleware
from whitenoise import WhiteNoise
if whitecompress:
    static_compress(whitecompress) # auto mins and gzips all js and css files
botapp = bottle.app()
for nftyRoute in (mainRoute, appRoute, clientRoute, apiRoute):          
    botapp.merge(nftyRoute)
botapp = SessionMiddleware(botapp, beaker_opts)
botapp = WhiteNoise(botapp)
botapp.add_files(staticfolder, prefix='static/')
botapp.add_files('{}/common/img/favicon.ico'.format(staticfolder), prefix='favicon.ico')
print('WhiteNoise Enabled')
WSGIServer(("0.0.0.0", int(port)), botapp, handler_class=WebSocketHandler).serve_forever()

Это позволяет вам публиковать ваши статические файлы, а также автоматически обрабатывает доставку сжатых файлов.Я нахожу это решение чуть более надежным, чем вариант, встроенный в бутылку.

...