WSL运行Chatwoot/Rails报shebang\r警告及ruby\r报错如何解决
问题原因
两个异常完全同源:所有报错、警告都来自文件被错误写入了Windows风格的CRLF换行符(行尾多了\r字符)。shebang解析时会把行尾的\r算进解释器路径,就出现了ruby\r不存在的报错,以及shebang行尾带\r的警告。
之前执行git config --global core.autocrlf true是错误配置:该参数设为true时,git会在检出文件时强制把LF换行转为CRLF,完全不适合WSL/Linux环境,且修改配置不会自动修复已经检出的错误换行文件,所以警告一直存在。
修复步骤
- 先修正git换行配置,在WSL终端执行:
git config --global core.autocrlf input
该配置下,git提交文件时会自动把CRLF转为LF,检出时不做换行转换,适配WSL/Linux环境使用。 - 进入本地Chatwoot仓库根目录,清除git本地缓存,按新配置重置工作区文件:
git rm --cached -r . git reset --hard HEAD
该操作会丢弃所有未提交的本地修改,如有自定义改动请提前备份。
- 安装换行转换工具,批量清理残留的CRLF字符:
先执行sudo apt update && sudo apt install dos2unix -y安装工具,再执行:find . -type f \( -name "*.rb" -o -name "*.sh" -o -name "Procfile*" -o -path "./bin/*" \) -exec dos2unix {} \;
该命令会把所有ruby脚本、shell脚本、Procfile配置、bin目录下的可执行文件的换行统一转为Linux标准的LF格式。 - 校验依赖后重启服务:
执行bundle install重新校验ruby依赖完整性,之后再运行rails s或foreman start -f Procfile.dev即可正常启动,之前的警告、报错都会消失。
注意事项
- 如果需要同时在Windows资源管理器和WSL中操作同一个仓库,Windows侧的git配置保持
core.autocrlf true即可,WSL侧固定为input,两边不会出现换行冲突。 - 不要尝试手动修改rbenv下的ruby二进制shebang行,属于治标不治本,后续其他脚本出现CRLF问题依然会报错。
内容的提问来源于stack exchange,提问作者gtltc
相关产品推荐
相关产品推荐

