Ruby on rails with unicorn不可读文件

时间:2016-07-05 07:18:45

标签: ruby-on-rails ruby unicorn

我正在尝试在rails环境中构建ruby但是当我检查unicorn状态时它会给我以下错误,我不知道该怎么做。我检查了config.rb的路径,它就在那里。

/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

2 个答案:

答案 0 :(得分:0)

确保通过命令运行unicorn

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

如果它不起作用,请分享您的文件config/unicorn.rb

答案 1 :(得分:0)

存在于路径中的文件并不意味着特定用户可以读取它。 检查您正在运行unicorn的用户是否可以访问这些文件和目录。通常代码所有者和独角兽用户是相同的,因此chown -R that_username:that_username /path/to/app/source相应。