初始化rbenv并从shell脚本
运行ruby脚本我希望svnserve运行pre-commit hook,写在ruby上。由于svnserve以root用户身份运行,因此它对用户rbenv安装一无所知。
我设置了一个软链接/ usr / bin / ruby - > /home/admin/.rbenv/shims/ruby。 结果,当我尝试
#!/usr/bin/ruby
puts "Pre-commit hook!"
显示错误:
Transmitting file data .svn: Commit failed (details follow):
svn: Commit blocked by pre-commit hook (exit code 255) with no output.
当我在服务器上手动运行时:
admin $ sudo ./pre-commit
/usr/bin/ruby: line 4: exec: rbenv: not found
所以,我想,需要rbenv初始化,但是如何?
答案 0 :(得分:6)
在钩子路径中:
预提交:
#!/bin/bash
export HOME=/home/user
if [ -d $HOME/.rbenv ]; then
export PATH="$HOME/.rbenv/shims:$PATH"
eval "$(rbenv init -)"
fi
$0.rb $*
预commit.rb:
#!/usr/bin/env ruby
ARGV.each_with_index { |arg, index| puts "Index #{index}: Argument #{arg}" }
答案 1 :(得分:2)
您应该在使用之前初始化rbenv
。
/path/to/user/home/.rbenv/bin/rbenv init
然后全局设置ruby版本:
rbenv global DESIRED-RUBY-VERSION
或localy:
rbenv local DESIRED-RUBY-VERSION
或每个shell:
rbenv shell DESIRED-RUBY-VERSION
虽然不确定shell设置是否可以在没有tty的情况下工作。
所以你可以创建一个shell脚本pre-commit.sh
并将其注册为svn钩子。
在其中初始化rbenv
并调用您的pre-commit.rb
文件