2013-04-08 27 views
2

背景更新金字塔模型结构现在会话被打破

所以我有一大堆的以不同的方式相互关联的车型Pyramis的应用程序。根据其一般角色,这些模型最初保存在一堆不同的文件中。例如,我有一个名为auth_models.py的文件,其中包含User和Group的定义。

我一直在争取处理进口和suchlike,因为所有的模型文件以这样一个复杂的方式相互关联,所以我放弃了,并把它们放在同一个文件中。然后我在别处更新了所有我的进口报表,所以一切都应该工作。

现在每当我尝试访问任何视图时,我都会收到内部服务器错误。事实证明,错误是由auth_models.py不再存在的事实引起的。该错误来自picklie.loads声明,所以我认为有一些会话信息被加载,不再有效。完整的错误信息以及我的会话设置都包含在这个问题的最后。

问题

如果我的假设是正确的,我怎么会得到金字塔“忘记”以安全的方式最后一次会议?

如果我的假设不正确,那么解决这个问题的最好方法是什么?我不希望恢复到我以前的目录结构,因为这会导致它自己的问题......

设置

session.type = file 
session.data_dir = %(here)s/data/sessions/data 
session.lock_dir = %(here)s/data/sessions/lock 
session.key = ****** 
session.secret = ***** 
session.cookie_on_exception = true 
session.auto = true 
session.timeout = 1800 

错误

2013-04-08 10:24:15,642 ERROR [waitress][Dummy-2] Exception when serving/
Traceback (most recent call last): 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_debugtoolbar-1.0.4-py3.3.egg/pyramid_debugtoolbar/toolbar.py", line 122, in toolbar_tween 
response = _handler(request) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_debugtoolbar-1.0.4-py3.3.egg/pyramid_debugtoolbar/panels/performance.py", line 55, in resource_timer_handler 
result = handler(request) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/tweens.py", line 21, in excview_tween 
response = handler(request) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_tm-0.7-py3.3.egg/pyramid_tm/__init__.py", line 82, in tm_tween 
reraise(*exc_info) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_tm-0.7-py3.3.egg/pyramid_tm/compat.py", line 13, in reraise 
raise value 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_tm-0.7-py3.3.egg/pyramid_tm/__init__.py", line 63, in tm_tween 
response = handler(request) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/router.py", line 161, in handle_request 
response = view_callable(context, request) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/config/views.py", line 345, in rendered_view 
result = view(context, request) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/config/views.py", line 462, in _class_requestonly_view 
inst = view(request) 
File "/home/sheena/WORK/mega-3.3/mega/wsgi/pyramidapp/pyramidapp/views/basic_views.py", line 10, in __init__ 
BaseView.__init__(self,request) 
File "/home/sheena/WORK/mega-3.3/mega/wsgi/pyramidapp/pyramidapp/views/class_base_view.py", line 15, in __init__ 
BaseView.session_init(request) 
File "/home/sheena/WORK/mega-3.3/mega/wsgi/pyramidapp/pyramidapp/views/class_base_view.py", line 62, in session_init 
if not request.session.__contains__(sKey): 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/decorator.py", line 39, in __get__ 
val = self.wrapped(inst) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/request.py", line 350, in session 
return factory(self) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/session.py", line 204, in __init__ 
value = signed_deserialize(cookieval, self._secret) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/session.py", line 82, in signed_deserialize 
return pickle.loads(pickled) 
ImportError: No module named 'pyramidapp.models.auth_models' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/mako_templating.py", line 211, in __call__ 
result = template.render_unicode(**system) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/template.py", line 421, in render_unicode 
as_unicode=True) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/runtime.py", line 767, in _render 
**_kwargs_for_callable(callable_, data)) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/runtime.py", line 799, in _render_context 
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/runtime.py", line 825, in _exec_template 
callable_(context, *args, **kwargs) 
File "pyramid_debugtoolbar_templates_toolbar_dbtmako", line 111, in render_body 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_debugtoolbar-1.0.4-py3.3.egg/pyramid_debugtoolbar/panels/request_vars.py", line 42, in content 
if hasattr(self.request, 'session'): 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/decorator.py", line 39, in __get__ 
val = self.wrapped(inst) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/request.py", line 350, in session 
return factory(self) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/session.py", line 204, in __init__ 
value = signed_deserialize(cookieval, self._secret) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/session.py", line 82, in signed_deserialize 
return pickle.loads(pickled) 
ImportError: No module named 'pyramidapp.models.auth_models' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/waitress-0.8.2-py3.3.egg/waitress/channel.py", line 329, in service 
task.service() 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/waitress-0.8.2-py3.3.egg/waitress/task.py", line 173, in service 
self.execute() 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/waitress-0.8.2-py3.3.egg/waitress/task.py", line 380, in execute 
app_iter = self.channel.server.application(env, start_response) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/router.py", line 251, in __call__ 
response = self.invoke_subrequest(request, use_tweens=True) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/router.py", line 227, in invoke_subrequest 
response = handle_request(request) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_debugtoolbar-1.0.4-py3.3.egg/pyramid_debugtoolbar/toolbar.py", line 135, in toolbar_tween 
toolbar.process_response(response) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_debugtoolbar-1.0.4-py3.3.egg/pyramid_debugtoolbar/toolbar.py", line 56, in process_response 
vars, request=request) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/renderers.py", line 88, in render 
return helper.render(value, None, request=request) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/renderers.py", line 557, in render 
result = renderer(value, system_values) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/mako_templating.py", line 219, in __call__ 
reraise(MakoRenderingException(errtext), None, exc_info[2]) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/compat.py", line 131, in reraise 
raise value.with_traceback(tb) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/mako_templating.py", line 211, in __call__ 
result = template.render_unicode(**system) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/template.py", line 421, in render_unicode 
as_unicode=True) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/runtime.py", line 767, in _render 
**_kwargs_for_callable(callable_, data)) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/runtime.py", line 799, in _render_context 
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/runtime.py", line 825, in _exec_template 
callable_(context, *args, **kwargs) 
File "pyramid_debugtoolbar_templates_toolbar_dbtmako", line 111, in render_body 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_debugtoolbar-1.0.4-py3.3.egg/pyramid_debugtoolbar/panels/request_vars.py", line 42, in content 
if hasattr(self.request, 'session'): 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/decorator.py", line 39, in __get__ 
val = self.wrapped(inst) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/request.py", line 350, in session 
return factory(self) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/session.py", line 204, in __init__ 
value = signed_deserialize(cookieval, self._secret) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/session.py", line 82, in signed_deserialize 
return pickle.loads(pickled) 
pyramid.mako_templating.MakoRenderingException: 

Traceback (most recent call last): 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/mako_templating.py", line 211, in __call__ 
result = template.render_unicode(**system) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/template.py", line 421, in render_unicode 
as_unicode=True) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/runtime.py", line 767, in _render 
**_kwargs_for_callable(callable_, data)) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/runtime.py", line 799, in _render_context 
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/Mako-0.7.3-py3.3.egg/mako/runtime.py", line 825, in _exec_template 
callable_(context, *args, **kwargs) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_debugtoolbar-1.0.4-py3.3.egg/pyramid_debugtoolbar/templates/toolbar.dbtmako", line 60, in render_body 
${panel.content()|n} 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid_debugtoolbar-1.0.4-py3.3.egg/pyramid_debugtoolbar/panels/request_vars.py", line 42, in content 
if hasattr(self.request, 'session'): 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/decorator.py", line 39, in __get__ 
val = self.wrapped(inst) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/request.py", line 350, in session 
return factory(self) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/session.py", line 204, in __init__ 
value = signed_deserialize(cookieval, self._secret) 
File "/home/sheena/WORK/mega-3.3/lib/python3.3/site-packages/pyramid-1.4-py3.3.egg/pyramid/session.py", line 82, in signed_deserialize 
return pickle.loads(pickled) 
ImportError: No module named 'pyramidapp.models.auth_models' 

回答

2

已存储了一些会话cookie中的模型实例,它使用pickle来序列化和反序列化数据。

因为您将模型移动到另一个模块,所以pickle不能再加载会话数据。

你可以做两件事情:

  • 如果你不关心的会话数据,只需删除您的会话cookie。使用您的浏览器工具手动删除cookie,可能会删除您网站的所有cookie。

  • 在旧位置为模型创建别名。创建一个pyramidapp.models.auth_models模块,该模块只需导入使用的模型即可。这个模块不需要被别的东西导入,pickle会在需要的时候加载它。

任何未来会话都将与您的模型的新位置一起创建,这仅影响旧会话数据。

+0

在我问之前我清除了我的cookies,但事实证明我没有清除所有这些。谢谢 – Sheena 2013-04-08 09:40:52