3

初始化 rbenv 并从 shell 脚本运行 ruby​​ 脚本

我希望 svnserve 运行预提交挂钩,用 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 初始化,但是怎么做呢?

4

2 回答 2

7

在钩子路径中:

预提交:

#!/bin/bash
export HOME=/home/user
if [ -d $HOME/.rbenv ]; then
  export PATH="$HOME/.rbenv/shims:$PATH"
  eval "$(rbenv init -)"
fi
$0.rb $*

预提交.rb:

#!/usr/bin/env ruby
ARGV.each_with_index { |arg, index| puts "Index #{index}: Argument #{arg}" }
于 2012-11-21T10:07:34.483 回答
2

您应该在使用它之前进行初始化rbenv

/path/to/user/home/.rbenv/bin/rbenv init

然后全局设置 ruby​​ 版本:

rbenv global DESIRED-RUBY-VERSION

或本地:

rbenv local DESIRED-RUBY-VERSION

或每个外壳:

rbenv shell DESIRED-RUBY-VERSION

虽然不确定 shell 设置是否可以在没有 tty 的情况下工作。

所以你可以创建一个 shell 脚本,pre-commit.sh并将其注册为 svn 钩子。

在里面初始化rbenv并调用你的pre-commit.rb文件

于 2012-11-20T14:13:43.080 回答