Webフックを受け取るnode.jsアプリケーションを構築しました。現在は、ジキルのウェブサイトを構築するために使用されます。
私はこれを私のサーバーに設定し、jekyll build
jekyllウェブサイトのルート(フックが送信される場所)で実行すると完全に機能します。シェルでsshを介してnode.jsアプリケーションを実行すると、gitフックがトリガーされたときにすべてがうまく機能します。
しかし、Node.jsアプリケーションがupstartスクリプト(以下の表示)で実行されていると、gemが見つからないようです。私がインストールしたと確信している依存関係(私のユーザーだけでなくグローバル)を依頼し続けます。
私が置いたスクリプトでは、これはローカルにインストールされたbin:をecho`which jekyll`
指していることを示しています。しかし、jekyllコマンドを実行した直下では失敗します。jekyll
/home/christophe/.gem/ruby/2.0.0/bin/jekyll
/usr/lib/ruby/2.0.0/rubygems/dependency.rb:296:in `to_specs': Could not find 'jekyll' (>= 0) among 31 total gem(s) (Gem::LoadError)
from /usr/lib/ruby/2.0.0/rubygems/dependency.rb:307:in `to_spec'
from /usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_gem.rb:47:in `gem'
from /home/christophe/.gem/ruby/2.0.0/bin/jekyll:22:in `<main>'
jekyllを正しく実行するには、このbashスクリプトをどのように実行する必要がありますか?
突然現れる
# /etc/init/libservice.conf
# Task to automatically start the library service.
author "Christophe De Troyer"
description "Run the githook for the blog."
# Path of the configuration files
env PROJ="/home/christophe/jekyll-builder"
# Configure to run as `christophe`
setuid christophe
setgid christophe
script
export PATH=/home/christophe/.gem/ruby/2.0.0/bin:$PATH
cd $PROJ
gulp run
end script
start on startup
#Respawn the process if it crashes
#If it respawns more than 10 times in 5 seconds stop
respawn limit 10 5
ビルドスクリプト
#!/bin/bash
########################
# Parameters from Node #
########################
giturl=$1
reponame=$2
branch=$3
ownermail=$4
reporoot=$5
htmlsink=$6
www=$7
##########
# Script #
##########
# Check to see if reponame exists. If not, git clone it
if [ ! -d $reporoot ]; then
mkdir -p $reporoot
git clone $giturl $reporoot
fi
# Checkout and pull branch.
cd $reporoot
git checkout $branch
git pull origin $branch
cd -
echo `which jekyll`
jekyll # fails
# Run jekyll
jekyll build -s $reporoot -d $htmlsink # fails too
修正する:
gem env
ユーザーとしてログインした場合:
RubyGems Environment:
- RUBYGEMS VERSION: 2.0.14
- RUBY VERSION: 2.0.0 (2014-01-12 patchlevel 384) [x86_64-linux-gnu]
- INSTALLATION DIRECTORY: /var/lib/gems/2.0.0
- RUBY EXECUTABLE: /usr/bin/ruby2.0
- EXECUTABLE DIRECTORY: /usr/local/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /var/lib/gems/2.0.0
- /home/christophe/.gem/ruby/2.0.0
- /usr/share/rubygems-integration/2.0.0
- /usr/share/rubygems-integration/all
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
gem env
upstartを介して実行されるnode.jsアプリケーションで実行されるスクリプトで提供されます。
RubyGems Environment:
- RUBYGEMS VERSION: 2.0.14
- RUBY VERSION: 2.0.0 (2014-01-12 patchlevel 384) [x86_64-linux-gnu]
- INSTALLATION DIRECTORY: /var/lib/gems/2.0.0
- RUBY EXECUTABLE: /usr/bin/ruby2.0
- EXECUTABLE DIRECTORY: /usr/local/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /var/lib/gems/2.0.0
- /.gem/ruby/2.0.0
- /usr/share/rubygems-integration/2.0.0
- /usr/share/rubygems-integration/all
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
GEM_PATHS
2番目の項目では、ホームディレクトリのプレフィックスがありません。私はenv GEM_PATH="/home/christophe/.gem/ruby/2.0.0"
upstartスクリプトを入れてこの問題を解決しようとしましたが、何も変わりませんでした。
その間、rootとしてdepsリストを手動でインストールして問題を解決しました。しかし、upstartが明示的に私のユーザーとして実行されているので、これは良いアプローチだとは思わない。第二に、このソフトウェアはrootアクセス権を持たないサーバーで実行する必要があります。だから私はまだ解決策を知りたいです。
sudo gem install jekyll
sudo gem install jekyll-gist
sudo gem install jekyll-cite
sudo gem install jekyll-scholar
sudo gem install addressable -v 2.3.5
sudo gem install yajl-ruby -v 1.2.0
sudo gem install pygments.rb
sudo gem install posix-spawn
答え1
GEM_HOME
環境設定はしてみましたか?少なくとも、次の方法でカスタムインストールディレクトリを一覧表示する新サービスを入手できました。
cd
gem install rake --install-dir grepable
/etc/init/footest.conf
次に、次のサービスを使用してください。
author "Nobody"
description "Echo some details"
env GEM_HOME="/home/jdoe/grepable"
setuid jdoe
setgid jdoe
script
/usr/bin/gem environment
end script
start on startup
respawn limit 10 5
再起動後、
# fgrep -1 grep /var/log/upstart/footest.log
- RUBY VERSION: 1.9.3 (2013-11-22 patchlevel 484) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/jdoe/grepable
- RUBY EXECUTABLE: /usr/bin/ruby1.9.1
- EXECUTABLE DIRECTORY: /home/jdoe/grepable/bin
- RUBYGEMS PLATFORMS:
--
- GEM PATHS:
- /home/jdoe/grepable
- /.gem/ruby/1.9.1
--install-dir
本番サービスの場合は、ベンダースペースまたはホームディレクトリに合わない場所に/を使用できます。GEM_HOME
答え2
数時間の痛みの終わりについに修正されました。
トリックは次のように設定することですPATH
。/home/cdetroye/.rbenv/shims:/home/cdetroye/.rbenv/bin:/usr/local/bin:/usr/bin:/bin
# /etc/init/libservice.conf
# Task to automatically start the library service.
author "Christophe De Troyer"
description "Run the githook for the blog."
# Path of the configuration files
env PATH=/home/cdetroye/.rbenv/shims:/home/cdetroye/.rbenv/bin:/usr/local/bin:/usr/bin:/bin
# Configure to run as `christophe`
setuid cdetroye
setgid cdetroye
script
cd $PROJ
gulp run
end script
start on startup
#Respawn the process if it crashes
#If it respawns more than 10 times in 5 seconds stop
respawn limit 10 5