3

rbenv を初期化し、シェルスクリプトから ruby​​ スクリプトを実行する

ruby で書かれた pre-commit フックを svnserve に実行させたい。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 $*

pre-commit.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

ただし、シェル設定がttyなしで機能するかどうかはわかりません。

シェル スクリプトを作成し、pre-commit.shそれを svn フックとして登録できます。

その中で初期化してファイルrbenvを呼び出しますpre-commit.rb

于 2012-11-20T14:13:43.080 に答える