2011-09-28 13 views
6

this questionと同じ問題が発生しました。答えの1つが示唆しているように、SSLを使わずにアプリを実行させることで、特定の問題を回避することができます。しかしFacebookは数日(2011年10月1日)にアプリのhttpsを強制するように設定されているため、これは持続しない解決策のようだ。私が最初にexampleapp.pyにapp.run中(ライン149の周りにSSLを有効にしようとしたので、同じように:最初はそれが欠けているのOpenSSLモジュール文句開始時に失敗してみてくださいPythonのHerokuサンプルアプリケーションをSSLでローカルに実行するときの問題

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

解決する方法の提案のカップルが見つかりました。そこにネット上の、と行うことを選択しない:開始時

(myapp)$ pip install pyopenssl 

今苦情:

(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 

しかし、その後、アプリにアクセスしようとしている:

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) 

これについてどうすればよいですか?それは間違ったPythonのバージョンですか、私だけのいくつかの他の基本的な事を迷っていますか?

答えて

1

これは、Werkzeugのバグで、fixedを持っています。

requirements.txtファイルのWerkzeugバージョンを0.8.2以上に変更し、アップグレードするにはpip install -r requirements.txtを実行してください。

1

SSLがv0.6以降でサポートされていると主張するローカル環境、スクリプト、インストールされたモジュール、およびwerkzeugコードを検査せずに "rv"が失敗する理由を確認することは難しい。

最も簡単な解決策は、ローカルマシンにWebサーバーapacheのおじいちゃんをインストールし、mod_sslモジュールを追加し、それらのSSL証明書を生成することです。最後に、Flaskのhelp pageに記載されているようにmod_wsgiを追加して、あなたのアプリを稼動させてください。

注:最初のタイマーはインストールが難しいかもしれませんが、一度やり遂げると、apacheは過去15年間で私にとって非常に信頼できるものでした。

関連する問題