Rails/Puma(Systemctl)集成fog-aws后Worker启动失败求助
问题排查方案
核心原因分析
systemd启动Puma时,fog-core初始化缓存目录时遇到权限或环境变量不匹配问题,导致worker进程启动失败;而手动启动时环境与权限完全匹配,因此运行正常。
具体排查步骤
确认systemd服务的运行用户
查看Puma的systemd服务文件(通常路径为/etc/systemd/system/puma.service),检查User=和Group=配置项。如果运行用户不是ec2-user,则ENV["HOME"]会指向该用户的家目录(比如/var/www或/home/deploy),而非你预期的/home/ec2-user。验证缓存目录权限
确保Puma运行用户对目标缓存目录有读写权限:- 若使用默认的
~/.fog-cache,则为对应用户的家目录创建该目录并设置权限:sudo mkdir -p /home/<puma-run-user>/.fog-cache sudo chown <puma-run-user>:<puma-run-group> /home/<puma-run-user>/.fog-cache - 或直接指定项目目录下的可访问路径,比如:
sudo mkdir -p /var/www/iot/shared/.fog-cache sudo chown <puma-run-user>:<puma-run-group> /var/www/iot/shared/.fog-cache
- 若使用默认的
强制指定fog缓存路径
在systemd服务文件的[Service]区块中添加环境变量,覆盖fog-core的默认缓存路径,避免依赖HOME变量:Environment=FOG_CACHE_PATH=/var/www/iot/shared/.fog-cache之后重新加载systemd配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart puma检查systemd的环境变量
执行以下命令查看Puma服务实际生效的环境变量,确认HOME是否正确:systemctl show puma --property=Environment若
HOME值不符合预期,可在systemd服务文件中手动设置:Environment=HOME=/home/ec2-user
临时调试技巧
在systemd服务的[Service]区块添加以下配置,开启fog调试模式,获取更详细的错误日志:
Environment=FOG_DEBUG=true
重启服务后查看Puma日志,定位具体报错点。
内容的提问来源于stack exchange,提问作者Ruby Dev
相关产品推荐
相关产品推荐

