简体   繁体   中英

Ruby on rails with unicorn not readable file

I'm trying to build in ruby on rails environment but when I check the unicorn status it gives me the following error and I don't know what to do. I checked the path to the config.rb and it's there.

/usr/local/rvm/gems/ruby-2.2.2/gems/unicorn-5.1.0/lib/unicorn/configurator.rb:644:in `parse_rackup_file': rackup file (status) not readable (ArgumentError)
    from /usr/local/rvm/gems/ruby-2.2.2/gems/unicorn-5.1.0/lib/unicorn/configurator.rb:74:in `reload'
    from /usr/local/rvm/gems/ruby-2.2.2/gems/unicorn-5.1.0/lib/unicorn/configurator.rb:65:in `initialize'
    from /usr/local/rvm/gems/ruby-2.2.2/gems/unicorn-5.1.0/lib/unicorn/http_server.rb:76:in `new'
    from /usr/local/rvm/gems/ruby-2.2.2/gems/unicorn-5.1.0/lib/unicorn/http_server.rb:76:in `initialize'
    from /usr/local/rvm/gems/ruby-2.2.2/gems/unicorn-5.1.0/bin/unicorn:126:in `new'
    from /usr/local/rvm/gems/ruby-2.2.2/gems/unicorn-5.1.0/bin/unicorn:126:in `<top (required)>'
    from /usr/local/rvm/gems/ruby-2.2.2/bin/unicorn:23:in `load'
    from /usr/local/rvm/gems/ruby-2.2.2/bin/unicorn:23:in `<main>'
    from /usr/local/rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `eval'
    from /usr/local/rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `<main>'

Unicorn config

#!/bin/bash
### BEGIN INIT INFO
# Provides:          unicorn
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: unicorn initscript
# Description:       Unicorn is an HTTP server for Rack application
### END INIT INFO

# based on http://gist.github.com/308216 by http://github.com/mguterl
#
## A sample /etc/unicorn/my_app.conf
##
## RAILS_ENV=production
## RAILS_ROOT=/var/apps/www/my_app/current
## PID=$RAILS_ROOT/tmp/unicorn.pid
## START_CMD="bundle exec unicorn"
## USER="www-data"
#PATH=/usr/local/bin:/usr/bin:/bin

set -e


sig () {
  test -s "$PID" && kill -$1 `cat "$PID"`
}

oldsig () {
  test -s "$OLD_PID" && kill -$1 `cat "$OLD_PID"`
}

run_cmd() {
  if [ -z "$SUDO" ]; then
    $CMD
  else
    $SUDO "$CMD"
  fi
}

cmd () {


  case $1 in
    start)
      sig 0 && echo >&2 "Already running" && return
      echo "Starting"
      run_cmd
      ;;
    stop)
      sig QUIT && echo "Stopping" && return
      echo >&2 "Not running"
      ;;
    force-stop)
      sig TERM && echo "Forcing a stop" && return
      echo >&2 "Not running"
      ;;
    restart|reload)
      sig USR2 && sleep 5 && oldsig QUIT && echo "Killing old master" `cat $OLD_PID` && return
      echo >&2 "Couldn't reload, starting '$CMD' instead"
      run_cmd
      ;;
    upgrade)
      sig USR2 && echo Upgraded && return
      echo >&2 "Couldn't upgrade, starting '$CMD' instead"
     run_cmd
      ;;
    rotate)
      sig USR1 && echo rotated logs OK && return
      echo >&2 "Couldn't rotate logs" && return
      ;;
    status)
      sig 0 && echo >&2 "Already running" && return
      echo >&2 "Not running" && return
      ;;
    *)
      echo >&2 "Usage: $0 <start|stop|restart|upgrade|rotate|force-stop>"
      return
      ;;
    esac
}

setup () {
#  echo -n "$RAILS_ROOT: "
  cd $RAILS_ROOT || exit 1

"/usr/local/rvm/scripts/rvm"
#/usr/local/rvm/environments/ruby-1.9.2-p290@hacfest

  if [ -z "$PID" ]; then
    PID=$RAILS_ROOT/tmp/pids/unicorn.pid
  fi

#  if [ -z "$DATABASE_URL" ]; then
#    DATABASE_URL=null
#  fi

#  export DATABASE_URL
  export PID
  export OLD_PID="$PID.oldbin"
  export RAILS_ROOT
  if [ -z "$START_CMD" ]; then
    START_CMD="bundle exec unicorn"
  fi
  CMD="cd $RAILS_ROOT && $START_CMD -c $UNICORN_CONFIG -E $RAILS_ENV -D"
  export CMD
  echo "CMD: " $CMD

  SUDO=""
#  echo who: `whoami`
#  echo user $USER
  if [ "$USER" != `whoami` ]; then
    SUDO="sudo -u $USER -s -H $RUNSHELL -c"
  else
    SUDO="$RUNSHELL -c"
  fi
  export SUDO
#  echo "SUDO: "$SUDO
#  echo $SHELL
}

start_stop () {

  # either run the start/stop/reload/etc command for every config under /etc/unicorn
  # or just do it for a specific one

  # $1 contains the start/stop/etc command
  # $2 if it exists, should be the specific config we want to act on
  if [ -f "/etc/unicorn/$2.conf" ]; then
    . /etc/unicorn/$2.conf
    export UNICORN_CONFIG="/etc/unicorn/$2.unicorn.rb"
    setup
    cmd $1
  else
    for CONFIG in /etc/unicorn/*.conf; do
      # import the variables
      export UNICORN_CONFIG=`echo ${CONFIG} | sed 's/conf/unicorn.rb/'`
      . $CONFIG
      setup

      # run the start/stop/etc command
      cmd $1
      unset PID
    done
   fi
}

ARGS="$1 $2"
start_stop $ARGS

Make sure that you run unicorn via command:

bundle exec unicorn -D -E <environment> -c config/unicorn.rb

And if it doesn't work, please share your file config/unicorn.rb

File being present at path does not mean it is readable by particular user. Check that user that you're running unicorn under has access to the files and directories. Usually code owner and unicorn user are the same, so chown -R that_username:that_username /path/to/app/source accordingly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM