Bri*_*unt 28 python debugging google-app-engine jinja2
当我在Google App Engine中运行Jinja2时,我得到了无用的调试信息.我收集这是因为FAQ中的这个项目:
我的追溯看起来很奇怪.发生了什么?
如果未编译speedups模块并且您使用的是没有ctypes的Python安装(没有ctypes的Python 2.4,Jython或Google的AppEngine),Jinja2无法提供正确的调试信息,并且回溯可能不完整.目前没有针对Jython或AppEngine的良好解决方法,因为ctypes在那里不可用,并且不可能使用speedups扩展.
虽然目前没有"良好"的解决方法,是否有任何解决方法,以便在出现异常时打印的信息可以更有帮助?
谢谢你的阅读.
布赖恩
小智 29
你可以通过monkeypatching将_ctypes和gestalt添加到开发服务器的C模块白名单中来解决这个问题.
为此,请将以下代码段放在main.py的顶部:
import os
if os.environ.get('SERVER_SOFTWARE', '').startswith('Dev'):
# Enable ctypes for Jinja debugging
from google.appengine.tools.dev_appserver import HardenedModulesHook
HardenedModulesHook._WHITE_LIST_C_MODULES += ['_ctypes', 'gestalt']
Run Code Online (Sandbox Code Playgroud)
如果您具有类似的仅本地模块需求,您还可以使用此技巧启用其他C模块.请注意,部署后这些模块仍然无法正常工作,因此请谨慎操作.
在使用python2.7的SDK 1.6.3上,您需要将上面的代码更改为:
import os
if os.environ.get('SERVER_SOFTWARE', '').startswith('Dev'):
# Enable ctypes for Jinja debugging
import sys
from google.appengine.tools.dev_appserver import HardenedModulesHook
assert isinstance(sys.meta_path[0], HardenedModulesHook)
sys.meta_path[0]._white_list_c_modules += ['_ctypes', 'gestalt']
Run Code Online (Sandbox Code Playgroud)
在SDK 1.8.6 for python 2.7上,试试这个:
PRODUCTION_MODE = not os.environ.get(
'SERVER_SOFTWARE', 'Development').startswith('Development')
if not PRODUCTION_MODE:
from google.appengine.tools.devappserver2.python import sandbox
sandbox._WHITE_LIST_C_MODULES += ['_ctypes', 'gestalt']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3356 次 |
| 最近记录: |