Kamal(Ruby on Rails)无法解析环境变量及路径问题求助
问题排查与解决方法
1. Socket::ResolutionError 无法解析${SERVER_IP}
原因
- Windows Git Bash对环境变量的解析逻辑和类Unix系统存在差异,可能未正确加载.env中的
SERVER_IP变量; - Deploy.yml中变量引用格式不规范,或Kamal未正确识别变量插值;
- 环境变量未被正确export到当前Shell会话。
调试与解决
- 先在Git Bash中执行
echo $SERVER_IP,确认变量是否已加载。无输出则说明.env未被正确读取; - 在Deploy.yml中明确指定env_file路径(参考第二个问题的配置),确保Kamal能读取.env中的变量;
- 手动export变量后再执行命令:
export SERVER_IP=你的服务器实际IP && kamal env push,验证是否能正常解析。
2. .env文件环境变量无法加载,仅硬编码生效
原因
- Deploy.yml中未配置
env_file项,Kamal默认不会自动加载项目根目录的.env文件; - .env文件格式错误(如多余空格、Windows换行符、引号使用不当);
- Git Bash未正确source .env文件,导致变量未进入当前Shell环境。
调试与解决
- 在Deploy.yml中添加env_file配置:
env_file: .env - 检查.env文件格式:确保每行都是
KEY=VALUE格式,字符串值仅在包含空格时加引号,用Notepad++将文件换行符转为LF格式; - 在Git Bash中执行
source .env && echo $你的变量名,确认变量能被正确读取后再执行Kamal命令。
3. 指定~/.ssh/id_rsa路径无法识别,需写入私钥内容
原因
- Windows Git Bash中的
~路径未被Kamal正确转换为Windows用户目录; - 私钥文件权限过宽(不符合SSH的600权限要求);
- Deploy.yml中ssh路径配置格式错误。
调试与解决
- 使用绝对路径替代
~:先在Git Bash中执行echo ~得到实际路径(如/c/Users/你的用户名/.ssh),然后在Deploy.yml中配置:ssh: private_key_path: /c/Users/你的用户名/.ssh/id_rsa - 修正私钥权限:在Git Bash中执行
chmod 600 ~/.ssh/id_rsa,确保仅当前用户拥有读写权限; - 确认私钥文件路径无拼写错误,且文件确实存在于指定位置。
内容的提问来源于stack exchange,提问作者Codevalley
相关产品推荐
相关产品推荐

