2011-09-28 74 views
6

本地運行,我開始了有同樣的問題在this question。作爲答案之一,可以通過讓應用程序運行而不使用SSL來避免該特定問題。但是,如Facebook設置爲強制執行在短短的幾天內(2011年10月1日)的應用程序的https這似乎是不會持久的解決方案。我第一次嘗試啓用SSL在app.run(大約149線在exampleapp.py像這樣:問題越來越Heroku的示例應用程序的Python與SSL

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

在第一次嘗試失敗了,在開始抱怨缺少OpenSSL的模塊上找到如何解決一些建議。嘗試訪問應用程序時

(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 

但後來:那在那裏上了網,並選擇做:

(myapp)$ pip install pyopenssl 

現在沒有在啓動投訴

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一個bug,即得到了fixed

將 requirements.txt文件中的Werkzeug版本更改爲至少0.8.2並運行pip install -r requirements.txt以進行升級。

1

很難弄清爲什麼「RV」不檢查當地環境,腳本安裝的模塊和WERKZEUG代碼,號稱SSL從V0.6開始支持失敗。

最簡單的解決方案是在本地機器上安裝Web服務器的爺爺apache,添加mod_ssl模塊並生成這些SSL證書。最後,在瓶的help page描述,讓您的應用程序啓動和運行添加mod_wsgi的。

注:安裝可能是艱鉅的初來乍道,但一旦你去,Apache是​​一個主力和非常可靠,我在過去的15年。