Драгоценные камни Ruby не распознаются в сценарии bash

Я создал приложение node.js, которое прослушивает веб-перехватчики. В настоящее время он используется для создания веб-сайта jekyll.

Я настроил его на своем сервере, и jekyll build отлично работает, когда я запускаю его в корне моего веб-сайта jekyll (который отправляет ловушки). Когда я запускаю приложение node.js через ssh в оболочке, все работает нормально, когда срабатывает ловушка git.

Однако, когда приложение node.js запускается из сценария выскочки (показанного ниже), кажется, что драгоценные камни не обнаруживаются. Он продолжает запрашивать зависимости, которые, я уверен, я установил (как глобально, так и для моего пользователя).

Внутри скрипта я поместил echo`which jekyll` , и это показывает, что он действительно указывает на локально установленный jekyll bin: / home / christophe /. драгоценный камень / рубин / 2.0.0 / бен / Джекил . Но прямо под ним я выполняю команду 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>'

Как я могу выполнить этот сценарий bash, чтобы правильно выполнить jekyll?

Upstart

# /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 из сценария, выполняемого из приложения 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" в сценарий выскочки, но это ничего не изменило.

Тем временем я решил эту проблему, введя вручную список deps от имени пользователя root. Однако я не думаю, что это хороший подход, поскольку выскочка явно работает как мой пользователь. А во-вторых, это программное обеспечение должно работать на сервере, на котором у меня нет прав 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
0
08.01.2016, 18:27
0 ответов

Теги

Похожие вопросы