Redmine迁移至Debian9后访问登录页报500错误求助
Redmine迁移Debian 9后访问500报错修复方案
报错根因
错误提示unknown keywords: permitted_classes, aliases是跨发行版直接拷贝Redmine核心程序文件导致的Ruby依赖不兼容:
permitted_classes、aliases是Ruby YAML解析组件Psych 3.1.0及以上版本才支持的传参- Debian 9默认软件源搭载的Ruby版本为2.3,内置Psych版本为2.x系列,无法识别上述两个参数
- 直接从Ubuntu环境拷贝
/usr/share/redmine等核心程序目录,没有适配Debian 9的依赖环境,Redmine运行时调用YAML解析方法传入旧版Psych不支持的参数,直接触发500错误。
修复操作步骤
- 安装Debian 9源内适配的Redmine核心依赖
不要直接使用从Ubuntu拷贝的核心程序文件,先通过apt安装匹配Debian 9环境的Redmine基础包,自动安装适配版本的Ruby、Psych及其他依赖:apt update # 按原服务使用的数据库选择安装对应依赖,用MySQL就装redmine-mysql,PostgreSQL就装redmine-pgsql apt install -y redmine redmine-mysql libapache2-mod-passenger - 同步业务数据与自定义配置
核心程序安装完成后,只迁移业务相关内容,不要覆盖核心程序文件:- 将原服务器导出的Redmine数据库备份,导入Debian 9上为Redmine创建的空数据库中
- 将原服务器
/etc/redmine目录下的database.yml(数据库连接配置)、configuration.yml(站点全局配置)两个自定义配置文件,同步到Debian 9的/etc/redmine目录,将文件属主调整为www-data:www-data保证可读 - 将原Redmine的自定义主题、第三方插件、上传附件目录,分别同步到Debian 9 Redmine安装路径下的
themes、plugins、files目录,同样调整对应权限
- 修正Apache配置并清理缓存
- 检查之前同步的Apache vhost配置,将里面的Redmine路径、Passenger相关路径修改为Debian 9上Redmine的实际安装路径(Debian 9源安装的Redmine默认路径为
/usr/share/redmine) - 执行命令清空旧缓存:
rm -rf /var/cache/redmine/*
- 检查之前同步的Apache vhost配置,将里面的Redmine路径、Passenger相关路径修改为Debian 9上Redmine的实际安装路径(Debian 9源安装的Redmine默认路径为
- 执行数据结构适配
进入Redmine安装目录,执行迁移命令保证数据库结构、插件结构和当前安装的Redmine版本匹配:cd /usr/share/redmine bundle exec rake db:migrate RAILS_ENV=production bundle exec rake redmine:plugins:migrate RAILS_ENV=production bundle exec rake tmp:cache:clear RAILS_ENV=production - 重启服务生效
systemctl restart apache2
跨服务器迁移Redmine时,禁止跨发行版/跨大版本系统直接拷贝核心程序目录,优先使用目标系统包管理器安装适配环境的核心程序,仅同步业务数据、自定义配置、插件、主题、附件类内容,可避免90%以上的依赖兼容问题。
内容的提问来源于stack exchange,提问作者Moatez
相关产品推荐
相关产品推荐

