GunicornDjango:找不到Django项目

2024-10-01 17:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直试图通过Django,Gunicorn,nginx来设置我的生产服务器(linode512),但nginx和Gunicorn中出现了错误。由于nginx部分纯粹与服务器问题有关,所以我必须将其发布到serverfault中。但是对于Gunicorn的错误,这与我的项目结构有关

Django Project/
  apps/
  confs/
    development/
    production/gunicorn.conf
  settings/
    custom.py
    database.py
    development.py
    production.py
    default.py
  static/
    js/
    css/
    admin/
  templates/
  manage.py
  urls.py

这个结构在Django development server中运行良好,但是当我尝试使用Gunicorn时,它显示RuntimeError("django project not found")完整的错误详细信息是here

Gunicorn设置:

^{pr2}$

项目路径:

/opt/Project1432/releases/current/Project1432/...

有人能指导我解决这个问题吗?在

谢谢!在

更新:

Gunicorn运行命令: 我在上面给出的项目路径中运行这个命令。在

gunicorn_django --config /opt/Project1432/releases/current/Project1432/confs/production/gunicorn.conf

Tags: 项目djangopy服务器conf错误nginx结构
1条回答
网友
1楼 · 发布于 2024-10-01 17:22:17

在我看来,这个项目并没有走上古尼康的道路。在

就个人而言,我使用manage.py run_gunicorn,并通过命令行传递所有配置参数 对于路径,我使用virtualenv,并在我的shell scrpt中找到bin/activate

这是我的bash脚本:

#!/bin/sh

### BEGIN INIT INFO
# Provides:             myProject.exemple.com
# Required-Start:       $syslog $nginx
# Required-Stop:        $syslog $nginx
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description:    the django fast_cgi portal for myProject.exemple.com
### END INIT INFO

# with this config :
#  the project is in /home/web/prod/myProject.exemple.com/src/myProject/
#  the socket is in /var/run/django/myProject.sock   
#  the log files is /val/log/nginx/myProject.exemple.com/gunicorn.log
#  the pid file is /var/run/django/myProject.pid      

# note, for debuging purpose, you can set a DEBUG env variable to prevent gunicorn to fork and to see all the output.
# ie :  sudo DEBUG=True /etc/init.d/django_myProject start                                                                                                                                                                                              

if [ -f  "/lib/lsb/init-functions-color"] ;
then
  .  /lib/lsb/init-functions-color
else
  . /lib/lsb/init-functions
fi

# not exactly used by workon, but used to source the activate
WORKON_HOME=/home/web/prod/Envs                                                                                                                                                                                                              

# change on eveny new project                                                                                                                                                                                                                
PROJECT_NAME=myProject                                                                                                                                                                            
DOMAINE=$PROJECT_NAME.exemple.com                                                                                                                                                                                                         

# fixed                                                                                                                                                                                                                                                                                                                                                                                                                                                  
PIDFILE=/var/run/django/$PROJECT_NAME.pid                                                                                                                                                                                                    
LOGFILE=/var/log/nginx/$DOMAINE/gunicorn.log                                                                                                                                                                                                 
SOCKFILE=/var/run/django/$PROJECT_NAME.sock                                                                                                                                                                                                  
SOCKET=unix:$SOCKFILE                                                                                                                                                                                                                        
#SOCKET=192.9.201.3:8050                                                                                                                                                                                                                     
#This is the command to be run, give the full pathname                                                                                                                                                                                       
PROJECT_DIR=/home/web/prod/$DOMAINE/src/$PROJECT_NAME/                                                                                                                                                                                       
DAEMON="$PROJECT_DIR/manage.py run_gunicorn"                                                                                                                                                                                                 
USER=www-data                                                                                                                                                                                                                                
GROUP=www-data                                                                                                                                                                                                                               
WORKERS=2                                                                                                                                                                                                                                    

# could be changed                                                                                                                                                                                                                           

#DAEMON_OPTS="run_gunicorn  workers 1 \
#                           worker-connections 5 \
#                           daemon\
#                           user www-data\
#                           group www-data\
#                          -t 30\
#                           bind unix:$SOCKET \
#                           pid $PIDFILE \
#                           error-logfile /var/log/nginx/$DOMAINE/gunicorn.log"
#                     daemon \


DEBUG_ARGS="         user=$USER \
                     group=$GROUP \
                     workers=$WORKERS \
                     bind $SOCKET \
                    -t 90 \
                     settings=$PROJECT_NAME.settings.prod \
                     name=$DOMAINE"

DAEMON_OPTS="       $DEBUG_ARGS \
                     pid=$PIDFILE \
                     daemon \
                     log-file=$LOGFILE \
                     log-level=info"


start()
{

  cd "$PROJECT_DIR"
  log_begin_msg "starting django website" "$PROJECT_NAME"
  mkdir -p `dirname $SOCKFILE`
  chown www-data:www-data  `dirname $SOCKFILE`
#  echo "$SOCKET" |  grep '^unix:' > /dev/null 2> /dev/null
#  if [ ! -e "$SOCKFILE" -a "$?" -eq "0" ] 
#  then
#    log_warning_msg "creation du socket $SOCKFILE"
#    
#    mkfifo $SOCKFILE
#    
#  fi
  if [ -f "$PIDFILE" ]
  then
    ps faux | grep -v grep | grep "$DAEMON" | grep `cat $PIDFILE` > /dev/null
    if [ $? -eq 0 ]
    then
      log_failure_msg "fichier pid deja present avec un pid existant"
      log_end_msg 1
      return 1
    fi
    rm "$PIDFILE"
    log_warning_msg "pid file deja existant"
  fi
  if [ -f "$WORKON_HOME/$PROJECT_NAME/bin/activate" ];
  then
    . $WORKON_HOME/$PROJECT_NAME/bin/activate 
  else
    echo "impossible d'activer l'environement $WORKON_HOME/$PROJECT_NAME/bin/activate"
    exit 1
  fi
  if [ ! -z  "$DEBUG" ] ;
  then
    echo "sourcing $WORKON_HOME/$PROJECT_NAME/bin/activate"
    echo $DAEMON $DEBUG_ARGS
    $DAEMON $DEBUG_ARGS
  else
    $DAEMON $DAEMON_OPTS
  fi
  if [ $? -eq 0 ]
  then
    log_end_msg 0
  else
    log_end_msg 1
  fi


}

stop()
{
  log_begin_msg "stoping django website" "$PROJECT_NAME"
  if [ -f  "$PIDFILE" ]
  then
    start-stop-daemon  oknodo  stop  quiet  pidfile $PIDFILE 2> /dev/null
    rm "$PIDFILE"
    log_end_msg 0
  else
    log_failure_msg "pid file absent for $PROJECT_NAME django website"
    #log_end_msg 1
  fi

}

status()
{
  if [ -f "$PIDFILE" ]
  then
    # fichier pid existant
    ps faux | grep -v grep | grep $DAEMON | grep `cat $PIDFILE` > /dev/null
    if [ $? -eq 0 ]
    then
      echo "$PROJECT_NAME django website running"
    else
      echo "WARN !! pid file present but $PROJECT_NAME django website stopped"
    fi
  else
    ps faux | grep -v grep | grep $DAEMON > /dev/null
    if [ $? -eq 0 ]
    then
      echo "WARN !! $PROJECT_NAME django website apear to be running but don't have a PID FILE"
    else
      echo "$PROJECT_NAME django website stopped"
    fi
  fi
}

case "$1" in
  start)
    start
  ;;
  stop)
    stop
  ;;
  restart)
    stop
    sleep 2
    start
  ;;
  status)
    status
  ;;

  *)
  echo "Usage: "$1" {start|stop|restart|status}"
  exit 1
esac

exit 0

相关问题 更多 >

    热门问题