2012-06-14 1 views
0

Я пытаюсь перейти от Cherrypy к бутылке & Gevent (сервер).
После я бегу:Бутылочный эквивалент engine.restart()

application=bottle.default_app() #bottle 
WSGIServer(('', port), application, spawn=None).serve_forever() #gevent 

Я хочу, чтобы перезагрузить сервер так же, как если перегружатель перезагрузили сервер (но только тогда, когда я говорю сервер к).
Поэтому я хочу получить доступ к странице с запросом на учет и только после правильной проверки подлинности она будет перезапущена.

Вот мой функциональный пример CherryPy:

@expose 
def reloadMe(self, u=None, p=None): 
    if u=="username" and p=="password": 
     engine.restart() 
    raise HTTPRedirect('/') 

Больше просто я спрашиваю, как я могу перезагрузить этот сценарий так, что мои изменения в исходный файл реализованы, но только тогда, когда я извлечения «перезагрузки» страницы ,
я буквально только нужно Bottlepy эквивалент

engine.restart() #cherrypy 

не знает не один, как это сделать?

+0

Взгляните на http://stackoverflow.com/questions/11004204/how-can-i-get-bottle-to-restart-on-file-change/11053279#11053279 –

+0

Это не помогает мне. Я хочу только перезагрузить сервер, когда я говорю серверу, чтобы перезагрузить не когда-либо обновленный файл сервера. У меня есть пример того, чего я хочу, кроме его написания для Cherrypy. – gabeio

ответ

1

Вы можете написать небольшой сценарий оболочки для перезапуска сервера gevent wsgi.

, то с помощью этого кода вы можете вызвать скрипт.

@get('/restartmyserver') 
def handler(): 
    http_auth_data = bottle.request.auth() # returns a tuple (username,password) only basic auth. 
    if http_auth_data[0] == user and http_auth_data[1] == password: 
     os.system("your_shell_script_to_restart_gevent_wsgi") 
    bottle.redirect('/') 

Дайте мне знать, если вам нужна дополнительная информация.

+0

oh geez Я полностью не думал о повторном запуске скрипта -.- но который из: 'os.system()', 'os.exec()', 'os.popen()' или 'os .spawn() 'было бы лучше, потому что я не хочу, чтобы он поддерживал текущий процесс, но я бы не возражал, чтобы он сохранял один и тот же идентификатор? – gabeio

+0

В сценарии оболочки вы можете сначала «killall» gevent-процессы. Затем просто создайте новые. Также, как только скрипт оболочки будет выполнен, процесс будет автоматически уничтожен. И бутылка также вернется. вы можете использовать os.system() для этого. – Rohan