You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache部署的Django 2.0.2网站重载时在新旧状态间反复切换

解决Webfaction上Apache部署Django 2.0.2时内容反复切换的问题

我之前在Webfaction托管Django项目时也碰到过几乎一模一样的诡异状况——修改代码重启Apache后,第一次加载能看到最新修改的内容,按F5刷新又变回旧版本,来回切换,而且不止样式,连业务逻辑代码的改动都受影响。结合踩过的坑,这大概率是Apache进程未完全重启或多进程共存导致请求分流的问题,给你几个针对性的解决方案:

  • 彻底重启Apache,放弃优雅重启
    Webfaction默认的apachectl restart是"优雅重启",旧的Apache子进程会处理完当前请求再退出,过渡阶段新旧进程会同时存在,请求可能随机命中旧进程(返回旧代码)或新进程(返回新代码)。解决方法是先彻底停服,再重新启动:

    apachectl stop
    # 等待3-5秒,确保所有进程完全终止
    apachectl start
    

    你可以用ps aux | grep httpd命令检查,确保重启后没有旧的httpd进程残留。

  • 手动清理mod_wsgi守护进程
    如果你的Django是用mod_wsgi的daemon模式部署的,Apache重启可能不会自动杀掉旧的daemon进程,这些旧进程会继续运行旧版本的代码。你可以手动杀掉所有mod_wsgi相关进程:

    ps aux | grep mod_wsgi | awk '{print $2}' | xargs kill -9
    

    之后再重启Apache,确保新的daemon进程加载最新代码。

  • 排查Django模板缓存(针对模板修改场景)
    虽然你说问题不止于样式,但如果涉及模板改动,Django在生产环境(DEBUG=False)会自动缓存模板。你可以临时在settings.py的TEMPLATES配置里关闭模板缓存验证:

    TEMPLATES = [
        {
            # ... 其他原有配置
            'OPTIONS': {
                'debug': True,
                # 暂时注释掉缓存加载器,改用直接加载
                'loaders': [
                    'django.template.loaders.filesystem.Loader',
                    'django.template.loaders.app_directories.Loader',
                ],
            },
        },
    ]
    

    这样每次请求都会重新读取模板文件,验证是否是缓存导致的问题。问题解决后记得改回缓存加载器,避免影响生产性能。

  • 快速排除浏览器缓存干扰
    虽然从症状看可能性不高,但可以用浏览器隐私/无痕模式打开网站,或者按Ctrl+Shift+R强制刷新(跳过浏览器缓存)验证。如果问题消失,再针对性调整静态资源的缓存头配置。

另外,你提到之前背景透明度也出现过同样问题,说明这是环境层面的共性问题,不是某次代码修改的特例,优先从Apache进程管理和mod_wsgi配置入手排查,应该能快速解决。

内容的提问来源于stack exchange,提问作者Michael S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:11:48