前段时间在服务器上搭建的 Gitlab 不知道为啥昨晚突然出现问题。push 代码的时候报错:
/usr/bin/env: ruby: No such file or directory
登陆一开始发现 rvm 有一个警告: 我按着提示解决后。还是报原来的错误:
$ ssh -T git@localhost
/usr/bin/env: ruby: No such file or directory
Gitlab 在配置的时候新建了一个 git 账户,我在这个账户下试了一下:
$ ssh git@localhost echo $PATH
/home/chunpeng_wen/.rvm/gems/ruby-2.0.0-p247/bin:/home/chunpeng_wen/.rvm/gems/ruby-2.0.0-p247@global/bin:/home/chunpeng_wen/.rvm/rubies/ruby-2.0.0-p247/bin:/home/chunpeng_wen/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ ssh git@localhost env
MAIL=/var/mail/git
USER=git
SSH_CLIENT=127.0.0.1 54254 22
HOME=/home/git
LOGNAME=git
SSH_ORIGINAL_COMMAND=env
PATH=/usr/bin:/bin:/usr/sbin:/sbin
SHELL=/bin/sh
PWD=/home/git
SSH_CONNECTION=127.0.0.1 54254 127.0.0.1 22
我尝试这样:
sudo ln -s /home/chunpeng_wen/.rvm/rubies/ruby-2.0.0-p247/bin/ruby /usr/bin/ruby
这样之后 ssh 连接好了,但是 http 连接会报错,提示找不到找不到一些 gem。 这应该是虽然 /usr/bin/ruby 文件存在了,但需要的 gem 还是在我自己的 rvm 里。
我在 GitHub 上查到了这个 Issue:gitlab-shell + rvm,我感觉是说 ssh 连接后并没有执行环境变量脚本,所以 bash 没有将 rvm 添加到环境变量里?看完了也不知道怎么解决这个问题。。感觉 Linux 知识欠缺太多了。。 Gitlab 站点运行了一个多月都没问题,就在昨晚突然不行了。。好奇怪。求大神指导如何解决。。
看了一下 gitlab-shell 的源码。在用 ssh 方式进行 push、fetch 等操作的时候。根据/home/git/.ssh/authorized_keys
文件的配置会执行/home/git/gitlab-shell/bin/gitlab-shell
脚本。这个脚本的第一行就是
#!/usr/bin/env ruby
因为是 ssh 过来的,环境变量里没有 ruby 的路径,因此就报错了。 所以我非常丑陋的把这段改成了我 rvm 里的路径。
结论就是,生产环境中不要使用 rvm....