Puma Upstart не загружает переменные ENV

Я развернул приложение в рабочей среде на виртуальной машине Ubuntu Server. Он использует Puma, поэтому я следовал этому руководству: https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-puma-and-nginx.-on-ubuntu-14-04

чтобы настроить его там (в настоящее время он работает правильно на героку, мы собираемся перенести его на этот новый сервер).

Это мой /etc/init/puma-manager.conf

# /etc/init/puma-manager.conf - manage a set of Pumas

description "Manages the set of puma processes"

# This starts upon bootup and stops on shutdown
start on runlevel [2345]
stop on runlevel [06]

# Set this to the number of Puma processes you want
# to run on this machine
env PUMA_CONF="/etc/puma.conf"
pre-start script
  for i in `cat $PUMA_CONF`; do
    app=`echo $i | cut -d , -f 1`
    logger -t "puma-manager" "Starting $app"
    start puma app=$app
  done
end script

И мой /etc/init/puma.conf

description "Puma Background Worker"

# no "start on", we don't want to automatically start
stop on (stopping puma-manager or runlevel [06])

# change apps to match your deployment user if you want to use this as a less privileged user (recommended!)
setuid user
setgid user

respawn
respawn limit 3 30

instance ${app}

script

# source ENV variables manually as Upstart doesn't, eg:
. /etc/server-vars
exec /bin/bash <<'EOT'
  # set HOME to the setuid user's home, there doesn't seem to be a better, portable way
  export HOME="$(eval echo ~$(id -un))"

  if [ -d "/usr/local/rbenv/bin" ]; then
    export PATH="/usr/local/rbenv/bin:/usr/local/rbenv/shims:$PATH"
  elif [ -d "$HOME/.rbenv/bin" ]; then
    export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
  elif [ -f  /etc/profile.d/rvm.sh ]; then
    source /etc/profile.d/rvm.sh
  elif [ -f /usr/local/rvm/scripts/rvm ]; then
    source /etc/profile.d/rvm.sh
  elif [ -f "$HOME/.rvm/scripts/rvm" ]; then
    source "$HOME/.rvm/scripts/rvm"
  elif [ -f /usr/local/share/chruby/chruby.sh ]; then
    source /usr/local/share/chruby/chruby.sh
    if [ -f /usr/local/share/chruby/auto.sh ]; then
      source /usr/local/share/chruby/auto.sh
    fi
    # if you aren't using auto, set your version here
    # chruby 2.0.0
  fi

  cd $app
  logger -t puma "Starting server: $app"    
  exec bundle exec puma -C config/puma.rb
EOT
end script

Он работает правильно, НО он не устанавливает переменные ENV, которые я указываю в:

/etc/server-vars

Я не хочу помещать все переменные ENV прямо в этот скрипт, потому что их много, и это ограничивает удобство использования скрипта.


person fedest    schedule 05.05.2016    source источник
comment
Вы должны искать журнал ошибок upstart: askubuntu .com/questions/36200/how-do-i-debug-upstart-scripts . Это может дать вам некоторое представление о том, что происходит не так.   -  person Ivan Denysov    schedule 05.05.2016
comment
У вас есть профайл?   -  person Bryan Dimas    schedule 05.05.2016
comment
У вас есть путь к приложению, указанный в /etc/puma.conf, верно?   -  person Sebin    schedule 06.05.2016
comment
Я искал журналы и нашел некоторые ошибки, это было из-за этого. Но теперь я столкнулся с новой проблемой, которую описываю в своем посте.   -  person fedest    schedule 06.05.2016


Ответы (1)


Решение для меня состояло в том, чтобы использовать «set -a» перед поиском файла среды. Вот документация с описанием того, что делает set -a: Set Встроенный

Попробуйте установить -a перед поиском файла среды, как показано в следующем примере:

# /etc/init/puma.conf - Puma config

# This example config should work with Ubuntu 12.04+.  It
# allows you to manage multiple Puma instances with
# Upstart, Ubuntu's native service management tool.
#
# See puma-manager.conf for how to manage all Puma instances at once.
#
# Save this config as /etc/init/puma.conf then manage puma with:
#   sudo start puma app=PATH_TO_APP
#   sudo stop puma app=PATH_TO_APP
#   sudo status puma app=PATH_TO_APP
#
# or use the service command:
#   sudo service puma {start,stop,restart,status}
#

description "Puma Background Worker"

# no "start on", we don't want to automatically start
start on runlevel [2345]
stop on runlevel [06]

# change apps to match your deployment user if you want to use this as a less privileged user (recommended!)
setuid deploy
setgid deploy

respawn
respawn limit 3 30

instance ${app}

script
# this script runs in /bin/sh by default
# respawn as bash so we can source in rbenv/rvm
# quoted heredoc to tell /bin/sh not to interpret
# variables

# source ENV variables manually as Upstart doesn't, eg:
#. /etc/environment

exec /bin/bash <<'EOT'
  set -a
  . /etc/environment

  # set HOME to the setuid user's home, there doesn't seem to be a better, portable way
  export HOME="$(eval echo ~$(id -un))"

  if [ -d "/usr/local/rbenv/bin" ]; then
    export PATH="/usr/local/rbenv/bin:/usr/local/rbenv/shims:$PATH"
  elif [ -d "$HOME/.rbenv/bin" ]; then
    export PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
  elif [ -f  /etc/profile.d/rvm.sh ]; then
    source /etc/profile.d/rvm.sh
  elif [ -f /usr/local/rvm/scripts/rvm ]; then
    source /etc/profile.d/rvm.sh
  elif [ -f "$HOME/.rvm/scripts/rvm" ]; then
    source "$HOME/.rvm/scripts/rvm"
  elif [ -f /usr/local/share/chruby/chruby.sh ]; then
    source /usr/local/share/chruby/chruby.sh
    if [ -f /usr/local/share/chruby/auto.sh ]; then
      source /usr/local/share/chruby/auto.sh
    fi
    # if you aren't using auto, set your version here
    # chruby 2.0.0
  fi


  logger -t puma "Starting server: $app"
  cd $app
  exec bundle exec puma -C /home/deploy/brilliant/config/puma.rb
EOT
end script
person UncleAdam    schedule 20.08.2017