Невозможно добавить сопоставление с подприложением в WebPy

Я просто хочу прояснить, что в Windows он работает нормально, но когда я пытаюсь развернуть этот скрипт на своем VPS, он терпит неудачу.

Это немного странно, потому что, если я добавляю сопоставление к основному экземпляру веб-приложения, которое называется «mainwebapp», оно работает, но всякий раз, когда я добавляю его к любому подприложению, оно отображается как webpy «Not Found», я бью головой о стену из-за этого.

В винде у меня Wamp 2.2. в моем Vps у меня есть CentOS 5, nginx с uWsgi и те же версии Python (2.7) и Webpy из моих окон.

Я почти уверен, что это проблема с nginx/uwsgi, потому что, когда я переключаюсь на apache/mod_wsgi на своем Vps, он также работает, как и на моем локальном сервере Wamp.

Пока это код, который я тестировал, он очень простой:

class subappcls:
     def GET(self):
          return "This will also be shown fine"


sub_mappings = (
     "/subpath", subappcls
)


#subclass web app
subwebapp = web.application( sub_mappings, globals() )



#mapped clas
class mapped_cls:
def GET(self):
     return "this mapped sub app will not be found"


#Here I add mappings:
subwebapp.add_mapping("/mapped_sub_path", mapped_cls



class appcls:
def GET(self):
     return "main app"



main_mappings = (
     "/subapp", subwebapp,
     "/app", appcls
)

mainwebapp = web.application( main_mappings, fvars=globals() )

class indexcls:
def GET(self):
     return "this will be shown just fine"

mainwebapp.add_mapping("/another",indexcls)


application = mainwebapp.wsgifunc()

Когда я получаю доступ:

/subapp/subpath # будет работать

/subapp/mapped_sub_path # не будет работать

Это будет работать нормально:

/приложение

/Другой

Это журнал uwsgi: * Запуск uWSGI 1.3 (64-разрядная) [вт, 4 декабря 18:41:52 2012] скомпилирован с версией: 4.1.2 20080704 (Red Hat 4.1.2- 52) 24 ноября 2012 г. 02:21:31 os: Linux-2.6.18-194.17.4.el5xen #1 SMP Пн, 25 октября, 16:36:31 EDT 2010 ВНИМАНИЕ: вы используете uWSGI как корень!!! (используйте флаг --uid) ограничение количества ваших процессов составляет 32832 размер вашей страницы памяти составляет 4096 байт обнаруженный максимальный номер файлового дескриптора: 1024 механизм блокировки: надежные мьютексы pthread uwsgi сокет 0 привязан к адресу UNIX /tmp /app.sock fd 3 Версия Python: 2.7.3 (по умолчанию, 30 октября 2012 г., 06:37:20) [GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] Python threads поддержка отключена. Вы можете включить его с помощью --enable-threads *

РЕДАКТИРОВАТЬ: я включил потоки с параметром --enable-threads и тоже не работал.

Заранее спасибо.


person Uuid    schedule 04.12.2012    source источник


Ответы (1)


Проблема видимо в перезагрузке. Следующий код работает, если он запущен на интегрированном сервере разработки (с командой python code.py):

import web


web.config.debug = False  # turns off the reloader


class subappcls:
    def GET(self):
        return "This will also be shown fine"

sub_mappings = (
    "/subpath", subappcls
)

#subclass web app
subwebapp = web.application(sub_mappings, globals())


#mapped class
class mapped_cls:
    def GET(self):
        return "this mapped sub app will not be found"


#Here I add mappings:
subwebapp.add_mapping("/mapped_sub_path", mapped_cls)


class appcls:
    def GET(self):
        return "main app"


main_mappings = (
    "/subapp", subwebapp,
    "/app", appcls,
)

mainwebapp = web.application(main_mappings, globals())


class indexcls:
    def GET(self):
        return "this will be shown just fine"

mainwebapp.add_mapping("/another", indexcls)


if __name__ == "__main__":
    mainwebapp.run()
else:
    application = mainwebapp.wsgifunc()

Бегущий завиток:

curl http://localhost:8080/subapp/mapped_sub_path
this mapped sub app will not be found
person Andrey Kuzmin    schedule 04.12.2012
comment
Вы гений, у меня есть несколько подприложений, и я просто отключил его для основного, но не для подприложений, это действительно было исправлением, большое спасибо!! - person Uuid; 05.12.2012
comment
Я не проверял это на uwsgi, но это должно работать. Установка web.config.debug на False приведет к глобальному отключению перезагрузки для всего стека приложений. - person Andrey Kuzmin; 05.12.2012