Traveling Ruby教程Wrapper脚本执行异常及预期结果疑问
Traveling Ruby启动脚本故障排查:预期结果+分步解决办法
预期执行结果
这个脚本是Traveling Ruby打包应用的启动入口,正常运行时,它会自动定位到打包好的Ruby解释器,执行lib/app/hello.rb里的代码。如果是教程里的示例hello.rb,大概率会输出类似Hello, world!的文本,程序无报错并正常退出(返回码为0)。
一步步排查问题
1. 核对目录结构是否符合要求
Traveling Ruby对文件位置有严格要求,先确认两个关键路径是否存在:
- 脚本所在目录下的
lib/ruby/bin/ruby:这是打包好的Ruby解释器,必须存在且路径正确 - 同目录下的
lib/app/hello.rb:你的应用入口文件,不能缺失
可以用以下命令验证(把your_script.sh换成你的脚本文件名):
# 先进入脚本所在目录 cd $(dirname ./your_script.sh) ls -l lib/ruby/bin/ruby ls -l lib/app/hello.rb
如果输出No such file or directory,说明你未按教程步骤完成打包,或文件存放位置错误。
2. 检查文件权限是否足够
- 给启动脚本添加可执行权限:
chmod +x your_script.sh - 确保打包的Ruby解释器也具备可执行权限:
chmod +x lib/ruby/bin/ruby
3. 临时关闭set -e查看详细错误
脚本开头的set -e会让脚本一遇到错误就直接退出,不利于排查具体问题。你可以临时注释这一行,再重新运行:
#!/bin/bash # set -e # 先注释掉这行,方便查看完整错误信息 SELFDIR="`dirname \"$0\"`" SELFDIR="`cd \"$SELFDIR\" && pwd`" exec "$SELFDIR/lib/ruby/bin/ruby" "$SELFDIR/lib/app/hello.rb"
重新运行后,就能看到具体的错误提示——比如找不到Ruby解释器、hello.rb存在语法错误等。
4. 单独测试核心组件
把脚本拆分开来测试,精准定位问题点:
- 先测试打包的Ruby解释器是否能正常工作:
如果能输出Ruby版本号,说明解释器没问题;如果报错,可能是你下载的Traveling Ruby包与当前系统不兼容(比如用了macOS的包在Linux上运行),或打包过程出错。./lib/ruby/bin/ruby -v - 再单独运行
hello.rb:
这一步能直接区分是./lib/ruby/bin/ruby lib/app/hello.rbhello.rb的代码问题,还是脚本调用逻辑的问题。
5. 使用正确的脚本执行方式
不要用sh your_script.sh运行脚本,因为bash的部分特性在sh环境下不支持,直接用./your_script.sh执行即可(前提已添加可执行权限)。
内容的提问来源于stack exchange,提问作者Don M
相关产品推荐
相关产品推荐

