2013-02-20 32 views
3

請忍受我,因爲我是一個極端的新手,並不完全知道我在說什麼。郵政接收鉤不使用正確的紅寶石

我試圖設置一個Git post-receive hook來部署我的Jekyll站點,如here所述。它的內容是

#!/usr/bin/env sh 

GIT_REPO=$HOME/git/jekyll.git 
TMP_GIT_CLONE=$HOME/tmp/jekyll 
PUBLIC_WWW=$HOME/public_html 

echo $PATH 

git clone $GIT_REPO $TMP_GIT_CLONE 
cd $TMP_GIT_CLONE 
echo "Run jekyll" 
jekyll --no-auto $TMP_GIT_CLONE $PUBLIC_WWW 
cd $HOME 
echo "Remove temporary dir..." 
rm -Rf $TMP_GIT_CLONE 
echo "Temporary dir removed." 
exit 

我回應PATH出於故障排除的目的。如果我通過ssh登錄,並與~/git/jekyll.git/hooks/post-receive手動執行腳本,一切工作正常,並在控制檯讀取

remote$ ~/git/jekyll.git/hooks/post-receive 
/usr/local/jdk/bin:/home7/contenw6/.rvm/gems/ruby-1.9.3-p194/bin:/home7/contenw6/.rvm/gems/[email protected]/bin:/home7/contenw6/.rvm/rubies/ruby-1.9.3-p194/bin:/home7/contenw6/.rvm/bin:/usr/local/jdk/bin:/home7/contenw6/perl5/bin:/usr/lib64/qt-3.3/bin:/home7/contenw6/perl5/bin:/ramdisk/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11R6/bin:/home7/contenw6/ruby/gems/bin:/home7/contenw6/bin:/usr/local/bin:/usr/X11R6/bin:/home7/contenw6/ruby/gems/bin:/home7/contenw6/.rvm/bin 
Cloning into '/home7/contenw6/tmp/jekyll'... 
done. 
Run jekyll 
Configuration from /home7/contenw6/tmp/jekyll/_config.yml 
Building site: /home7/contenw6/tmp/jekyll -> /home7/contenw6/public_html 
Successfully generated site: /home7/contenw6/tmp/jekyll -> /home7/contenw6/public_html 
Remove temporary dir... 
Temporary dir removed. 

然而,當我git push deploy master從我的筆記本電腦,我收到此錯誤:

laptop$ git push deploy master 
Counting objects: 5, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (3/3), done. 
Writing objects: 100% (3/3), 305 bytes, done. 
Total 3 (delta 2), reused 0 (delta 0) 
remote: /usr/libexec/git-core:/usr/local/jdk/bin:/ramdisk/bin:/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin:/home7/contenw6/ruby/gems/bin:/home7/contenw6/.rvm/bin:/home7/contenw6/.rvm/bin 
remote: Cloning into '/home7/contenw6/tmp/jekyll'... 
remote: done. 
remote: Run jekyll 
remote: /home7/contenw6/ruby/gems/gems/yajl-ruby-1.1.0/lib/yajl/yajl.so: [BUG] Segmentation fault 
remote: ruby 1.8.7 (2012-02-08 MBARI 8/0x6770 on patchlevel 358) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2012.02 
remote: 
remote: hooks/post-receive: line 14: 30293 Aborted     jekyll --no-auto $TMP_GIT_CLONE $PUBLIC_WWW 
remote: Remove temporary dir... 
remote: Temporary dir removed. 
To [email protected]:~/git/jekyll.git 
    154f467..80c8fcb master -> master 

它在我看來,當post-receive掛鉤由於git push而執行時,錯誤的ruby(1.8.7,大概是系統的?)正在被使用。請注意,PATH變量在每種情況下都不相同。

如果這是問題,那就像我可以弄清楚的一樣。我該如何解決?

回答

2

這樣:

1)你的家當是/usr/bin/env sh - 這不是RVM兼容的shell,或者使用zshbash

2)你需要以某種方式使用RVM,當您通過ssh你已經登錄時使用RVM通過~/.bash_profile但在腳本中,您不加載RVM,試試這個家當:

/home7/contenw6/.rvm/bin/rvm-shell 1.9.3-p194 
+0

謝謝!這得到了使用正確的Ruby的鉤子!然而,現在我得到了一個'Gem:LoadError',儘管如此,PATH變量仍然不相同,但由於這看起來像是一個單獨的(儘管相關)問題,我會選擇這個作爲答案。 – 2013-02-20 18:00:59

+0

我認爲它可能仍然是相關的,但可以隨時打開新的問題 – mpapis 2013-02-20 19:07:08

0

運行您的git master的用戶沒有正確使用rvm進行ruby設置。

首先,你必須找出哪個用戶在遠程運行Git(它可能是一個叫做「git」的用戶)。找到用戶後,將您的~/.rvm/目錄複製到該用戶的主目錄。例如,如果您的用戶名是鮑勃,用戶運行git被稱爲小膠質,那麼你就必須做到以下幾點:

sudo rm -rf /home/gitter/.rvm 
sudo cp -R /home/bob/.rvm/ /home/gitter 

如果您沒有在您的家.rvm目錄,則以下可以幫助:

sudo rm -rf /home/gitter/.rvm 

希望這有助於。

+0

據我所知,我在我的筆記本和RVM運行我的git的主人在那裏工作得很好。 rvm IS在遠程服務器(後接收鉤正在運行)上搞砸了,我不知道如何解決它,因此問題。對不起,如果我解釋不好,我是git和rvm的新手。 – 2013-02-20 07:46:05

+0

我明白你的問題,但你必須自己執行一些步驟。查看更新以在一分鐘內回答。 – Shade 2013-02-20 08:55:59