2011-09-28 8 views
6

Zacząłem od tego samego problemu, co w przypadku this question. Jedna z odpowiedzi sugeruje, że można uniknąć tego konkretnego problemu, uruchamiając aplikację bez protokołu SSL. Ale ponieważ Facebook jest ustawiony na wymuszanie https dla aplikacji w ciągu zaledwie kilku dni (1 października 2011 r.), Wydaje się, że to rozwiązanie nie potrwa długo. Po raz pierwszy próbowali włączyć SSL w app.run (wokół linii 149 w exampleapp.py tak:.Problemy z pobieraniem przykładowej aplikacji Heroku do Pythona działają lokalnie z SSL

app.run(host='0.0.0.0', port=port, ssl_context='adhoc') 

Przy pierwszej próbie nie udało się na początku narzekał brakującego modułu OpenSSL Znaleziono kilka sugestii, w jaki sposób naprawić. że gdzieś tam w sieci, a następnie wybierz zrobić:

(myapp)$ pip install pyopenssl 

już nie ma skarg na początku:

(myapp)$ foreman start 
10:35:25 web.1  | started with pid 26934 
10:35:26 web.1  | * Running on https://0.0.0.0:5000/ 
10:35:26 web.1  | * Restarting with reloader 

ale wtedy, gdy próbuje uzyskać dostęp do aplikacji:

10:35:31 web.1  | ---------------------------------------- 
10:35:31 web.1  | Exception happened during processing of request from ('127.0.0.1', 61118) 
10:35:31 web.1  | Traceback (most recent call last): 
10:35:31 web.1  | File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock 
10:35:31 web.1  |  self.process_request(request, client_address) 
10:35:31 web.1  | File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 310, in process_request 
10:35:31 web.1  |  self.finish_request(request, client_address) 
10:35:31 web.1  | File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 323, in finish_request 
10:35:31 web.1  |  self.RequestHandlerClass(request, client_address, self) 
10:35:31 web.1  | File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 639, in __init__ 
10:35:31 web.1  |  self.handle() 
10:35:31 web.1  | File "path_to_myapp/lib/python2.7/site-packages/werkzeug/serving.py", line 189, in handle 
10:35:31 web.1  |  return rv 
10:35:31 web.1  | UnboundLocalError: local variable 'rv' referenced before assignment 
10:35:31 web.1  | ---------------------------------------- 
10:35:31 web.1  | Unhandled exception in thread started by <function inner at 0x10139e050> 
10:35:31 web.1  | Traceback (most recent call last): 
10:35:31 web.1  | File "path_to_myapp/lib/python2.7/site-packages/werkzeug/serving.py", line 599, in inner 
10:35:31 web.1  |  passthrough_errors, ssl_context).serve_forever() 
10:35:31 web.1  | File "path_to_myapp/lib/python2.7/site-packages/werkzeug/serving.py", line 355, in serve_forever 
10:35:31 web.1  |  HTTPServer.serve_forever(self) 
10:35:31 web.1  | File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 227, in serve_forever 
10:35:31 web.1  |  self._handle_request_noblock() 
10:35:31 web.1  | File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 287, in _handle_request_noblock 
10:35:31 web.1  |  self.shutdown_request(request) 
10:35:31 web.1  | File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 459, in shutdown_request 
10:35:31 web.1  |  request.shutdown(socket.SHUT_WR) 
10:35:31 web.1  | TypeError: shutdown() takes exactly 0 arguments (1 given) 

Co z tym zrobić? Czy jest to zła wersja Pythona, czy po prostu brak mi jakiejś innej podstawowej rzeczy?

Odpowiedz

1

Jest to błąd w Werkzeug, który dostał fixed.

Zmień wersję Werkzeug pliku requirements.txt na na co najmniej 0.8.2 i uruchom pip install -r requirements.txt, aby dokonać aktualizacji.

1

Trudno ustalić przyczynę niepowodzenia "rv" bez inspekcji środowiska lokalnego, skryptów, zainstalowanych modułów i kodu werkzeug, który twierdzi, że protokół SSL jest obsługiwany od wersji 0.6.

Najprostszym rozwiązaniem jest zainstalowanie na komputerze lokalnym dziadka serwerów WWW apache, dodanie modułu mod_ssl i wygenerowanie certyfikatów SSL. Na koniec dodaj mod_wsgi zgodnie z opisem w aplikacji Flask's help page, aby uruchomić i uruchomić swoją aplikację.

Uwaga: instalacja może być zniechęcająca dla pierwszych timerów, ale kiedy już się ruszysz, Apache jest koniem pociągowym i był wyjątkowo niezawodny przez ostatnie 15 lat.