FreeBSD13.0下Redmine4.2.3导出甘特图PNG提示缺少ImageMagick报错排查
Redmine甘特图导出PNG报错排查方案
可能的故障点及排查方法
1. Redmine运行进程的环境变量与手动执行环境不一致
你手动切换到www用户能正常执行convert命令,不代表Redmine运行的进程能拿到正确的PATH:
- 进入Redmine生产环境控制台:执行
RAILS_ENV=production rails c,执行puts ENV['PATH']和putswhich convert``,对比输出结果与你手动登录www用户执行的结果是否一致 - 检查FreeBSD下Apache的envvars配置,确认/usr/local/bin已经加入Apache运行时的PATH变量中
2. MiniMagick配置未生效
即使你在configuration.yml中配置了convert路径,也可能因为配置格式问题或者缓存未加载:
- 在Redmine生产环境控制台依次执行以下命令验证配置:
MiniMagick.cli_path:确认输出为你配置的/usr/local/bin/convertMiniMagick.version:如果正常返回ImageMagick版本号说明探测正常,如果报错说明配置未生效
- 检查configuration.yml的imagemagick_convert_command配置行,删除该行重新手敲,避免复制粘贴带来的半角/全角空格、隐藏字符问题
3. 临时目录权限异常
MiniMagick处理图片时需要读写系统临时目录,权限不足会被误判为组件缺失:
- 对比两台服务器的/tmp目录权限,正常应为1777
- 切换到www用户执行
touch /tmp/test_img && rm /tmp/test_img,确认临时目录读写权限正常 - 检查Redmine进程的TMPDIR环境变量,确认没有指向无权限的自定义临时目录
4. ImageMagick策略文件限制
ImageMagick7默认的policy.xml可能会限制PNG格式的读写权限:
- 对比两台服务器的
/usr/local/etc/ImageMagick-7/policy.xml文件内容,确认不存在PNG相关的限制规则 - 如果存在
<policy domain="coder" rights="none" pattern="PNG" />配置,将rights改为read|write或者直接删除该行
5. 缓存或进程残留问题
更新配置、安装包后没有彻底重启进程会导致旧逻辑依然运行:
- 停止Apache服务,执行
ps aux | grep ruby杀掉所有残留的Redmine相关进程,再重新启动Apache - 清理Redmine缓存和插件资产:
RAILS_ENV=production rake tmp:cache:clear RAILS_ENV=production rake redmine:plugins:assets
内容的提问来源于stack exchange,提问作者Jan Catrysse
相关产品推荐
相关产品推荐

