2009-06-19 46 views
2

我最近推送了一个Django应用程序。我们在服务器上的暂存子域中构建应用程序。当我上线时,我将登台子域的文件复制到主站点,创建了登台数据库,并将旧的登台站点指向新的登台数据库(让新的现场站点指向原始数据库)。这是在Apache下的mod_python。Django:在同一台服务器上的Live&Staging站点之间发生冲突

我已经为这两个网站创建了唯一的SESSION_COOKIE_NAME设置,并且我已将SESSION_COOKIE_DOMAIN设置为“.sitename.com”为活动网站,而None为分段网站。

我们看到的问题是,用户在现场管理员正在进行编辑(它出现)被保存到暂存站点。用户在请求期间也会“随机”注销管理网站。

有什么我明显做错了吗?因为子域名位于“staging.sitename.com”,SESSION_COOKIE_DOMAIN应该是“www.sitename.com”来限制它吗?我是否在现在的数据库中留下了旧的会话信息(我运行了./manage.py clean并删除了现存数据库中的所有会话)?

谢谢

回答

3

我们在过去几周遇到了这个问题。有几个地方可能会重叠。

1)你是否运行单独的Python解释器? 有几种方法可以配置mod_python,以便线程不会互相踩在一起。这里的关键是提供一个不同的ServerName(在这种情况下,域名为staging.sitename.comwww.sitename.com),并在Apache vhosts配置文件中提供独特的PythonInterpreter配置设置。

PythonInterpreter mysite 

Relevant Django docs on same-server deployments

2)您是否在使用同一端口的缓存后端? settings.py中有一个配置,可让您使用几个字符作为缓存内容的前缀,以将分段内容与实况内容分开。这是通过以下配置实现在settings.py:

CACHE_MIDDLEWARE_KEY_PREFIX = "STG_" 

另一种选择可能是在不同的文件系统缓存运行一段时间,看看问题是否得到解决。在settings.py,尝试添加

CACHE_BACKEND = 'file:///var/tmp/django_cache' 

3)您是否尝试删除所有的pyc文件的? 奇怪的是,当上述两个解决方案未能解决我们的问题时,我们运行了一个bash命令来删除服务器停止时所有编译后的python文件(.pyc文件)。

find ./ -type f -name "*.pyc" -exec rm -f {} \; 

这表示您的部署中的更改没有因为某种原因而重新编译。

希望这会有所帮助!

+0

优秀的答案! – 2009-06-20 03:58:39

相关问题