Ubuntu下Webhooks无法读取RVM安装的正确Ruby版本
问题:Webhook触发脚本与手动执行脚本时Ruby版本不一致
在Ubuntu 22系统上配置webhook,通过bash脚本执行Ruby相关任务时,发现手动运行脚本和webhook触发脚本使用的Ruby版本不一致。
测试脚本(test-ruby.sh)
#!/bin/sh echo 'Testing...' ruby -v; which ruby; bundle -v; which bundle;
现象
- 手动执行
sh test-ruby.sh时,输出的是RVM安装的Ruby版本(路径指向~/.rvm/...) - 通过webhook触发同一脚本时,输出的是系统默认Ruby版本(路径指向
/usr/bin/ruby)
原因
RVM的环境配置通常在用户登录shell的配置文件(如.bashrc、.bash_profile)中加载,但webhook服务以后台进程身份运行,不会加载这些用户级别的shell配置,因此无法识别RVM管理的Ruby,默认使用系统自带版本。
解决方法
方法1:在脚本中手动加载RVM环境
在脚本开头添加RVM初始化脚本,确保脚本能识别RVM管理的Ruby:
#!/bin/sh # 加载RVM环境,替换为你的用户实际路径 source /home/your_username/.rvm/scripts/rvm # 可选:指定要使用的Ruby版本(替换为你手动执行时的版本) rvm use 3.2.2 echo 'Testing...' ruby -v; which ruby; bundle -v; which bundle;
方法2:直接使用Ruby的绝对路径
找到手动执行时Ruby和bundle的绝对路径(例如/home/your_username/.rvm/rubies/ruby-3.2.2/bin/ruby),在脚本中直接调用该路径:
#!/bin/sh echo 'Testing...' /home/your_username/.rvm/rubies/ruby-3.2.2/bin/ruby -v; which /home/your_username/.rvm/rubies/ruby-3.2.2/bin/ruby; /home/your_username/.rvm/gems/ruby-3.2.2/bin/bundle -v; which /home/your_username/.rvm/gems/ruby-3.2.2/bin/bundle;
方法3:调整Webhook服务的运行用户
若webhook默认以root或其他系统用户运行,修改其服务配置,改用你的普通用户身份运行。这样服务会加载该用户的shell配置,自动识别RVM环境。
内容的提问来源于stack exchange,提问作者Hazem Hagrass
相关产品推荐
相关产品推荐

