rbo*_*e85 24 google-app-engine openssl
"在Python运行时,我们添加了对Python SSL库的支持,因此您现在可以打开与Apple的Push Notification服务等远程服务的安全连接."
此引用来自Google App Engine博客上的最新帖子.
如果要使用本机python ssl,则必须使用应用程序的app.yaml文件中的库配置启用它,在该文件中指定库名称"ssl"...
这些说明是通过Google App Engine文档为开发人员提供的.
以下行已添加到app.yaml文件中:
libraries:
- name: ssl
version: latest
Run Code Online (Sandbox Code Playgroud)
这与Google App Engine文档中提供的建议一致.
我试过用三种不同的配置来运行我的项目.两个正在工作,一个不工作.
将我的应用程序上传到Google App Engine并通过实时服务器运行我的项目后,一切正常.
当我在我的项目中运行manage.py runserver并包含Google App Engine SKD时PYTHONPATH,一切正常.
但是,当我运行我的项目时dev_appserver.py,我收到以下错误:
ImportError at /
No module named _ssl
Request Method: GET
Request URL: http://localhost:8080/
Django Version: 1.4.3
Exception Type: ImportError
Exception Value:
No module named _ssl
Exception Location: /usr/local/lib/google_appengine_1.7.7/google/appengine/tools/devappserver2/python/sandbox.py in load_module, line 856
Python Executable: /home/rbose85/Code/venvs/appserver/bin/python
Python Version: 2.7.3
Python Path:
['/home/rbose85/Code/product/site',
'/usr/local/lib/google_appengine_1.7.7',
'/usr/local/lib/google_appengine_1.7.7/lib/protorpc',
'/usr/local/lib/google_appengine_1.7.7',
'/usr/local/lib/google_appengine_1.7.7',
'/usr/local/lib/google_appengine_1.7.7/lib/protorpc',
'/usr/local/lib/google_appengine_1.7.7',
'/usr/local/lib/google_appengine_1.7.7/lib/protorpc',
'/home/rbose85/Code/venvs/appserver/lib/python2.7',
'/home/rbose85/Code/venvs/appserver/lib/python2.7/lib-dynload',
'/usr/lib/python2.7',
'/usr/local/lib/google_appengine',
u'/usr/local/lib/google_appengine_1.7.7/lib/django-1.4',
u'/usr/local/lib/google_appengine_1.7.7/lib/ssl-2.7',
u'/usr/local/lib/google_appengine_1.7.7/lib/webapp2-2.3',
u'/usr/local/lib/google_appengine_1.7.7/lib/webob-1.1.1',
u'/usr/local/lib/google_appengine_1.7.7/lib/yaml-3.10']
Server time: Wed, 24 Apr 2013 11:23:49 +0000
Run Code Online (Sandbox Code Playgroud)
jmg*_*jmg 46
对于当前的GAE版本(1.8.0至少到1.8.3),如果您希望能够在开发环境中调试SSL连接,则需要稍微调整一下gae沙箱:
重要信息:调整沙盒环境可能最终会在本地计算机上运行但不在生产环境中运行(例如,GAE仅支持生产中的出站套接字).当您完成应用程序的特定部分的开发后,我会建议您恢复沙盒.
小智 16
jmg的解决方案有效,但您可以修改相关模块,而不是更改sdk文件.
只需在项目设置的开头添加这样的内容即可.
# Just taking flask as an example
app = Flask('myapp')
if environment == 'DEV':
import sys
from google.appengine.tools.devappserver2.python import sandbox
sandbox._WHITE_LIST_C_MODULES += ['_ssl', '_socket']
from lib import copy_of_stdlib_socket.py as patched_socket
sys.modules['socket'] = patched_socket
socket = patched_socket
Run Code Online (Sandbox Code Playgroud)
我不得不使用一种稍微不同的方法让它在CircleCI中工作(不确定他们的venv配置的特性导致了这个):
appengine_config.py
import os
if os.environ.get('SERVER_SOFTWARE', '').startswith('Development'):
import imp
import os.path
import inspect
from google.appengine.tools.devappserver2.python import sandbox
sandbox._WHITE_LIST_C_MODULES += ['_ssl', '_socket']
# Use the system socket.
real_os_src_path = os.path.realpath(inspect.getsourcefile(os))
psocket = os.path.join(os.path.dirname(real_os_src_path), 'socket.py')
imp.load_source('socket', psocket)
Run Code Online (Sandbox Code Playgroud)
我遇到了这个问题,因为我没有ssl在app.yaml文件中进行销售。我知道OP可以做到这一点,但是对于那些因OP错误而登陆此处的人来说,值得确保在app.yaml文件中包含以下内容:
libraries:
- name: ssl
version: latest
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15564 次 |
| 最近记录: |