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

Ruby on Rails应用迁移至Debian10后写入/tmp目录异常求助

Debian 10下Rails+Passenger写入/tmp文件不可见的排查思路
  • 检查systemd私有tmp目录设置
    Debian 10开始部分服务默认启用PrivateTmp=true,会给Apache/Passenger进程分配独立的私有/tmp,和系统全局/tmp不共享:

    1. 查看Apache的systemd服务文件:cat /lib/systemd/system/apache2.service,查找PrivateTmp配置项
    2. 若存在PrivateTmp=true,注释该行后执行systemctl daemon-reload && systemctl restart apache2
    3. 可在Rails代码中临时添加调试代码确认实际tmp路径:puts Dir.tmpdir,查看输出是否为全局/tmp
  • 排查AppArmor权限限制
    Debian 10默认启用AppArmor,可能限制Apache进程对/tmp的访问:

    1. 检查AppArmor状态:aa-status,确认是否存在apache2的profile
    2. 查看Apache的AppArmor规则文件:cat /etc/apparmor.d/usr.sbin.apache2,确认是否允许对/tmp/** rw,的访问权限,若缺失则添加后重启AppArmor:systemctl restart apparmor
  • 检查Passenger的tmp目录配置
    Passenger可能自定义了临时目录,导致写入的文件不在系统/tmp:

    1. 查看Apache配置文件(如/etc/apache2/sites-available/your_app.conf或passenger.conf),查找PassengerTempDir配置项
    2. 若设置了该参数,进程会使用指定目录而非系统/tmp,可修改为/tmp或直接注释该行后重启Apache
  • 验证进程的chroot环境
    若Apache或Passenger配置了chroot,进程看到的/tmp是chroot根目录下的子目录:

    1. 检查Apache配置中是否有Chroot指令,或Passenger配置是否有PassengerChroot参数
    2. 若启用了chroot,需在chroot目录内创建可写的/tmp目录,或取消chroot配置
  • 排除系统自动清理机制
    Debian 10的systemd-tmpfiles会定期清理/tmp文件,默认清理10天未访问的文件,若刚创建的文件就消失可排除此情况;若需确认,查看清理规则:cat /etc/tmpfiles.d/tmp.conf,检查是否有异常的清理策略

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:43:32