代码之家  ›  专栏  ›  技术社区  ›  Tom

Django:同一服务器上的实时站点和临时站点之间的冲突

  •  2
  • Tom  · 技术社区  · 15 年前

    我最近推出了一个django应用程序。我们在服务器上的临时子域中构建了应用程序。当我上线时,我将登台子域的文件复制到主站点,创建了一个登台数据库,并将旧的登台站点指向新的登台数据库(使新的直播站点指向原始数据库)。这是在Apache下的mod_python上。

    我为两个站点创建了唯一的会话cookie名称设置,并将会话cookie域设置为.site name.com(对于活动站点),而没有设置为临时站点。

    我们看到的问题是,Live管理员中的用户正在进行编辑,这些编辑(看起来)正在保存到临时站点。在请求期间,用户还“随机”从管理站点注销。

    这里有什么我明显做错的地方吗?会话cookie域是否应为“www.sitename.com”,以限制它,因为子域位于“staging.sitename.com”?我是否在现在的实时数据库中保留了旧会话信息(我运行了./manage.py clean并在出现此问题之前从实时数据库中删除了所有会话)?

    谢谢

    1 回复  |  直到 15 年前
        1
  •  3
  •   Mike Clarke    15 年前

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

    1)您是否运行单独的python解释器? 有几种方法可以配置mod_python,这样线程就不会相互干扰。这里的关键点是提供一个不同的服务器名称(在本例中,是域 staging.sitename.com网站 网址:www.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 {} \;
    

    这将表明部署中的更改由于某种原因没有重新编译。

    希望这有帮助!