웹훅을 수신하는 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
두 번째 항목에서는 홈 디렉터리 접두사가 누락되었습니다 . 나는 env GEM_PATH="/home/christophe/.gem/ruby/2.0.0"
upstart 스크립트를 넣어서 이 문제를 해결하려고 시도했지만 아무 것도 바뀌지 않았습니다.
그동안 루트로 deps 목록을 수동으로 설치하여 문제를 해결했습니다. 그러나 upstart가 명시적으로 내 사용자로 실행되고 있기 때문에 이것이 좋은 접근 방식이라고 생각하지 않습니다. 둘째, 이 소프트웨어는 루트 액세스 권한이 없는 서버에서 실행되어야 합니다. 그래서 나는 여전히 해결책을 알고 싶습니다.
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