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

Ubuntu 16→18升级后生产环境CKAN出现500内部服务器错误

修复Ubuntu 18.04上CKAN 2.7.2生产环境500错误的思路

从你的日志来看,核心问题是系统升级后,Apache的mod_wsgi没有正确使用CKAN的Python虚拟环境,导致系统级Python包(/usr/local/lib/python2.7下的)和虚拟环境内的包(/usr/lib/ckan/default/lib/python2.7)发生版本冲突,尤其是pyutilib.component和pkg_resources这两个依赖。下面是具体的修复步骤:

1. 确保mod_wsgi绑定Python 2.7

Ubuntu 18.04默认同时预装Python 2和Python 3,mod_wsgi可能默认关联了Python 3,或者系统自带的Python 2环境和CKAN虚拟环境不兼容:

  • 先检查当前mod_wsgi使用的Python版本:
    mod_wsgi -v
    
  • 如果输出不是Python 2.7,安装Python 2版本的mod_wsgi并切换:
    sudo apt install libapache2-mod-wsgi-py2
    sudo a2dismod wsgi  # 禁用可能存在的Python 3版mod_wsgi
    sudo a2enmod wsgi   # 启用Python 2版
    sudo systemctl restart apache2
    

2. 修正WSGI脚本的路径优先级

你的apache.wsgi脚本没有确保虚拟环境的包路径优先加载,导致系统包干扰。修改/etc/ckan/default/apache.wsgi内容如下:

# 先激活CKAN虚拟环境
activate_this = '/usr/lib/ckan/default/bin/activate_this.py'
exec(open(activate_this).read(), {'__file__': activate_this})

# 强制将虚拟环境的包路径放在最前面,避免系统包干扰
import sys
sys.path.insert(0, '/usr/lib/ckan/default/src/ckan')
sys.path.insert(0, '/usr/lib/ckan/default/lib/python2.7/site-packages')

# 原有的加载逻辑
from paste.deploy import loadapp
config_file = '/etc/ckan/default/production.ini'
application = loadapp('config:%s' % config_file)

3. 重新安装虚拟环境内的依赖

系统升级可能破坏了虚拟环境内的依赖版本一致性,进入CKAN虚拟环境重新安装所有依赖:

source /usr/lib/ckan/default/bin/activate
# 先卸载冲突的包
pip uninstall -y pyutilib component pkg_resources
# 重新安装CKAN 2.7要求的依赖
pip install -r /usr/lib/ckan/default/src/ckan/requirements.txt
# 手动指定psycopg2版本(你提到的兼容版本)
pip install psycopg2==2.7.3.2
deactivate

4. 清理系统级的冲突包

/usr/local/lib/python2.7/dist-packages下的pyutilib等包会干扰虚拟环境,卸载系统级的这些包:

sudo pip2 uninstall -y pyutilib component

5. 验证依赖路径并重启服务

  • 进入虚拟环境,确认依赖都加载自虚拟环境:
    source /usr/lib/ckan/default/bin/activate
    python -c "import pkg_resources; print(pkg_resources.__file__)"
    python -c "import pyutilib.component; print(pyutilib.component.__file__)"
    deactivate
    
    输出路径应该都在/usr/lib/ckan/default/lib/python2.7/site-packages下。
  • 最后重启Apache:
    sudo systemctl restart apache2
    
    再用curl -I 127.0.0.1:8080测试,查看错误日志是否恢复正常。

内容的提问来源于stack exchange,提问作者Wes Hinsley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:17:33