Переписать проблему с настройкой Lighttpd с фреймворком Flask Python - PullRequest
2 голосов
/ 17 мая 2011

Я без проблем запустил и разработал свое приложение Flask, используя его встроенный сервер.Это работало хорошо, и было действительно гладко и весело.К сожалению, Lighttpd, как всегда, является проблемой для развертывания.Я следую инструкциям настолько внимательно, насколько могу, но, к сожалению, мое приложение все еще не работает.

Вот моя конфигурация:

server.modules   += ( "mod_fastcgi" )
server.modules   += ( "mod_rewrite" )

fastcgi.server = ("/bioinfo/main.fcgi" =>
    ((
        "socket" => "/tmp/bioinfo-fcgi.sock",
        "bin-path" => "/var/www/bioinfo/main.fcgi",
        "check-local" => "disable",
        "max-procs" => 1
    ))
)
fastcgi.debug = 1

url.rewrite-once = (
    "^/bioinfo/static/(.*)$" => "/bioinfo/static/$1",
    "^/bioinfo/(.*)$" => "/bioinfo/main.fcgi/$1"
)

# in: /etc/lighttpd/conf-available/10-fastcgi.conf

Это работает в этомон отображает главную страницу, но не любые последующие страницы.

В моем приложении Flask есть несколько обработчиков app.route, к которым я обращаюсь, используя GET или POST, используя некоторый XHR в клиенте.Кроме того, вот мой файл .fcgi, просто чтобы убедиться, что у меня нет здесь явных ошибок:

#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from main import app

if __name__ == '__main__':
    WSGIServer(app).run()

Если кто-то может определить проблему, то AJAX не работает с URI приложения (Скорее всего, потому что мои правила переписывания не очень удобны), я бы очень признателен.Заранее спасибо, ребята!

Ответы [ 3 ]

0 голосов
/ 02 декабря 2015

Я знаю, что этот ответ в значительной степени придет в будущем, но я столкнулся с аналогичной проблемой и обнаружил, что исправление для меня - убедиться, что я использовал url_for в своих шаблонах. Надеюсь, что вы поняли это!

0 голосов
/ 29 июля 2016

У меня была такая же проблема. Для меня решение было добавить это в файл fcgi, перед основной функцией:

class ScriptNameStripper(object):
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        environ['SCRIPT_NAME'] = ''
        return self.app(environ, start_response)

app = ScriptNameStripper(app)

Обязательно очистите кеш браузера при тестировании.

0 голосов
/ 17 мая 2011

Вам необходимо вручную перейти в каталог, в котором работает ваше приложение.

...