QA@IT

gitでpost-commitをhookしようとすると require "JSON"でエラーになってしまう。

2354 PV

git commit -am 'hoge'のコマンドのフックで、
project/.git/hooks/post-commmitのスクリプト#1を走らせると
エラー#2が出て動作しません(hogehogeは出力されない)。

require "JSON"を削除してからcommitしたり、.git/hooks/post-commmitを直接コマンドラインに入力すると動作します(hogehogeは出力される)。他のコマンドで使用しているgem jsonは問題なく動作しています。
gem install json や gem pristine --allを試しましたが、状況は変わりませんでした。

どなたか解決方法や糸口でもご存じの方いらしましたら、ご教授願いたいです。
よろしくお願いします。

#1. post-commmit(https://gist.github.com/4050155)

#!/usr/bin/env ruby

require "rubygems"
require "JSON"
p 'hogehoge'

#2. ERROR(https://gist.github.com/4049195)

/Users/yahsan2/.rvm/gems/ruby-1.9.3-p194/gems/json-1.7.5/lib/json/ext/parser.bundle: [BUG] Segmentation fault
ruby 1.8.7 (2011-12-28 patchlevel 357) [universal-darwin11.0]

error: .GIT/hooks/post-commit died of signal 6

#3 gem env

RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.24
  - RUBY VERSION: 1.9.3 (2012-04-20 patchlevel 194) [x86_64-darwin11.4.2]
  - INSTALLATION DIRECTORY: /Users/yahsan2/.rvm/gems/ruby-1.9.3-p194
  - RUBY EXECUTABLE: /Users/yahsan2/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/yahsan2/.rvm/gems/ruby-1.9.3-p194/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-11
  - GEM PATHS:
     - /Users/yahsan2/.rvm/gems/ruby-1.9.3-p194
     - /Users/yahsan2/.rvm/gems/ruby-1.9.3-p194@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

回答

エラーの出力をみると、...ruby-1.9.3-p194/gems/json-1.7.5... と ruby 1.9.3 のライブラリを参照しているのに、ruby 1.8.7 (2011-12-28 patchlevel 357) [universal-darwin11.0] と ruby 1.8.7 が実行されているのが気になります。

これが原因かはわかりませんが、post-commit 1 行目 (shebang) の /usr/bin/env ruby を ruby 1.9.3 のフルバス (/Users/yahsan2/.rvm/rubies/ruby-1.9.3-p194/bin/ruby かな?) に変更してみてはいかがでしょうか?

編集 履歴 (0)

回答ありがとうございます!

ご指摘の通り、フルパスにしてみたらエラーでなくなりました。フルパスも指定できること知りませんでした。

..#!/usr/bin/env ruby..
これでなぜhookの場合だけ参照するrubyが変わってしまうのか、
他のgemではエラーが出ないとか少し疑問が残ったままですが、

これでやりたいことができるようになったので、本当に助かりました!ありがとうございます!!

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。