Почему я получаю ошибку при запуске unicorn при загрузке системы?

Это мой скрипт инициализации для единорога (/etc/init.d/unicorn):

#! /bin/sh

PATH=/home/josue/.rvm/gems/ruby-1.9.3-p0/bin:/home/josue/.rvm/gems/ruby-1.9.3-p0@global/bin:/home/josue/.rvm/rubies/ruby-1.9.3-p0/bin:/home/josue/.rvm/bin:/usr/local/sbin:$
DAEMON=/home/josue/.rvm/gems/ruby-1.9.3-p0/bin/unicorn_rails

DAEMON_OPTS="-c /home/josue/sped/current/unicorn.rb -E production -D"
NAME=unicorn_rails
DESC=unicorn_rails
PID=/home/josue/sped/shared/pids/unicorn.pid

case "$1" in
  start)
        echo -n "Starting $DESC: "
        exec $DAEMON $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        kill -QUIT `cat $PID`
        echo "$NAME."
        ;;
  restart)
        echo -n "Restarting $DESC: "
        kill -QUIT `cat $PID`
        sleep 1
        $DAEMON $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
        echo -n "Reloading $DESC configuration: "
        kill -HUP `cat $PID`
        echo "$NAME."
        ;;
  *)
        echo "Usage: $NAME {start|stop|restart|reload}" >&2
        exit 1
        ;;
  esac

exit 0

Когда я запускаю /etc/init.d/unicorn start под обычным пользователем, все работает нормально, но когда я пытаюсь запустить как root, результат такой:

Starting unicorn_rails: /home/josue/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find unicorn (>= 0) amongst [bigdecimal-1.1.0, io-console-0.3, json-1.5.4, minitest-2.5.1, rake-0.9.2.2, rdoc-3.9.4] (Gem::LoadError)
    from /home/josue/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
    from /home/josue/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem'
    from /home/josue/.rvm/gems/ruby-1.9.3-p0/bin/unicorn_rails:18:in `<main>'

Итак, при запуске сервера юникорн не загружается автоматически.

Я использую:

  • убунту 10.04
  • РВМ
  • рубин 1.9.3-p0

person Josué Lima    schedule 01.11.2011    source источник


Ответы (3)


Есть несколько способов заставить его работать:

  1. Следуя вашему коду:

    PATH=/home/josue/.rvm/gems/ruby-1.9.3-p0/bin:/home/josue/.rvm/gems/ruby-1.9.3-p0@global/bin:/home/josue/.rvm/rubies/ruby-1.9.3-p0/bin:/home/josue/.rvm/bin:$PATH
    GEM_HOME=/home/josue/.rvm/gems/ruby-1.9.3-p0
    GEM_PATH=/home/josue/.rvm/gems/ruby-1.9.3-p0:/home/josue/.rvm/gems/ruby-1.9.3-p0@global
    
  2. Использование оберток rvm: https://rvm.io/integration/init-d/

  3. Или другие: https://rvm.io/integration/cron/
person mpapis    schedule 01.12.2012

Если вы находитесь в производственной среде, вы, вероятно, не хотите устанавливать некоторые из ваших драгоценных камней от имени пользователя root, а некоторые другие драгоценные камни объединяются/устанавливаются вместе с приложением Rails...

Существует простой способ решить проблему с OP: также установите GEM_PATH и GEM_HOME

Если вы правильно установите переменные среды PATH, GEM_PATH и GEM_HOME для учетной записи root (~/.bashrc), то вы сможете заставить ее работать. например исполняемый файл единорога должен находиться в корневом каталоге PATH, а связанные с GEM переменные окружения должны быть правильно установлены в том месте, где установлены драгоценные камни во время «установки пакета» (например, это может быть домашний каталог другого пользователя).

$ cat /root/.bashrc
export PATH=/home/josue/.rvm/gems/ruby-1.9.3-p0/bin:/home/josue/.rvm/gems/ruby-1.9.3-p0@global/bin:/home/josue/.rvm/rubies/ruby-1.9.3-p0/bin:/home/josue/.rvm/bin:$PATH
export GEM_HOME=/home/josue/.rvm/gems/ruby-1.9.3-p0/gems
export GEM_PATH=/home/josue/.rvm/gems/ruby-1.9.3-p0/gems:/home/josue/.rvm/gems/ruby-1.9.3-p0@global/gems

После запуска вы также должны коснуться файла /var/lock/subsys/$APP_NAME и удалить этот файл после убийства единорогов, чтобы ваша система LINUX знала, что ваше приложение запущено.

Это очень хорошо работает для меня в производстве.

Обычно я переименовываю сценарий /etc/init.d/unicorn в имя моего приложения, если у меня запущено несколько приложений.

person Tilo    schedule 30.11.2012

Кажется, драгоценный камень Unicorn не установлен под пользователем root. Вы пытались войти в систему как root, а затем установить его?

person WarHog    schedule 01.11.2011
comment
Недостатком этого скрипта является то, что вам всегда нужно будет устанавливать Unicorn от имени пользователя root -- отдельно от пакета установки вашего приложения Rails -- а это означает, что месяцы спустя вы все еще можете использовать старый/устаревший версию Unicorn после обновления вашего приложения Rails. Поэтому мой ответ об изменении PATH, GEM_PATH, GEM_HOME, вероятно, является лучшим способом сделать это в производстве. - person Tilo; 08.12.2012