Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OS X引导时自动启动Django FastCGI_Django_Macos_Nginx_Fastcgi - Fatal编程技术网

在OS X引导时自动启动Django FastCGI

在OS X引导时自动启动Django FastCGI,django,macos,nginx,fastcgi,Django,Macos,Nginx,Fastcgi,我让Django FastCGI/nginx在OS X上运行良好。我从终端开始我的FastCGI进程,如下所示: python manage.py runfcgi host=127.0.0.1 port=8000 --settings=settings 在我的nginx.conf文件中,我有: server { listen 8080; server_name localhost; location / { fastcgi_pass 127

我让Django FastCGI/nginx在OS X上运行良好。我从终端开始我的FastCGI进程,如下所示:

python manage.py runfcgi host=127.0.0.1 port=8000 --settings=settings
在我的nginx.conf文件中,我有:

server {
    listen       8080;
    server_name  localhost;
    location / {
        fastcgi_pass 127.0.0.1:8000;
我已经使用launchd自动启动了nginx,详情如下

我的问题是:当机器启动时,让FastCGI进程自动启动的正确方法是什么


谢谢大家!

我建议在这种情况下使用wsgi,因为wsgi进程是由nginx启动的,而不是一个“独立”进程。典型的nginx和wsgi配置:

myproject.wsgi:

#!/usr/bin/python2.7

import djangorecipe.wsgi

application = djangorecipe.wsgi.main('settings', logfile='/var/log/django/myproject.wsgi.log')
myproject.nginx.conf:

server {
    listen       80;
    server_name  myproject.com;

    # static resources
    location ^~ /static/ {
        alias   /var/www/myproject/static/;
        expires 31d;
    }

    wsgi_var  REQUEST_METHOD      $request_method;
    wsgi_var  QUERY_STRING        $query_string;
    wsgi_var  CONTENT_TYPE        $content_type;
    wsgi_var  CONTENT_LENGTH      $content_length;
    wsgi_var  SERVER_NAME         $server_name;
    wsgi_var  SERVER_PORT         $server_port;
    wsgi_var  SERVER_PROTOCOL     $server_protocol;

    # additional variables (not used if unavailable)
    wsgi_var  REQUEST_URI         $request_uri;
    wsgi_var  DOCUMENT_URI        $document_uri;
    wsgi_var  DOCUMENT_ROOT       $document_root;
    wsgi_var  SERVER_SOFTWARE     $nginx_version;
    wsgi_var  REMOTE_ADDR         $remote_addr;
    wsgi_var  REMOTE_PORT         $remote_port;
    wsgi_var  SERVER_ADDR         $server_addr;
    wsgi_var  REMOTE_USER         $remote_user;

    location  / {
        client_body_buffer_size 50;
        wsgi_pass /var/www/myproject/myproject.wsgi;

        wsgi_pass_authorization off;
        wsgi_script_reloading on;
        wsgi_use_main_interpreter on;
    }

    # logging
    access_log  /var/log/nginx/myproject/access.log;
    error_log   /var/log/nginx/myproject/error.log;
}

我建议在这种情况下使用wsgi,因为wsgi进程是由nginx启动的,而不是一个“独立”的进程。典型的nginx和wsgi配置:

myproject.wsgi:

#!/usr/bin/python2.7

import djangorecipe.wsgi

application = djangorecipe.wsgi.main('settings', logfile='/var/log/django/myproject.wsgi.log')
myproject.nginx.conf:

server {
    listen       80;
    server_name  myproject.com;

    # static resources
    location ^~ /static/ {
        alias   /var/www/myproject/static/;
        expires 31d;
    }

    wsgi_var  REQUEST_METHOD      $request_method;
    wsgi_var  QUERY_STRING        $query_string;
    wsgi_var  CONTENT_TYPE        $content_type;
    wsgi_var  CONTENT_LENGTH      $content_length;
    wsgi_var  SERVER_NAME         $server_name;
    wsgi_var  SERVER_PORT         $server_port;
    wsgi_var  SERVER_PROTOCOL     $server_protocol;

    # additional variables (not used if unavailable)
    wsgi_var  REQUEST_URI         $request_uri;
    wsgi_var  DOCUMENT_URI        $document_uri;
    wsgi_var  DOCUMENT_ROOT       $document_root;
    wsgi_var  SERVER_SOFTWARE     $nginx_version;
    wsgi_var  REMOTE_ADDR         $remote_addr;
    wsgi_var  REMOTE_PORT         $remote_port;
    wsgi_var  SERVER_ADDR         $server_addr;
    wsgi_var  REMOTE_USER         $remote_user;

    location  / {
        client_body_buffer_size 50;
        wsgi_pass /var/www/myproject/myproject.wsgi;

        wsgi_pass_authorization off;
        wsgi_script_reloading on;
        wsgi_use_main_interpreter on;
    }

    # logging
    access_log  /var/log/nginx/myproject/access.log;
    error_log   /var/log/nginx/myproject/error.log;
}

如果您已经将FastCGI/nginx设置为通过位于
/System/Library/LaunchDaemons/nginx.plist
的文件运行,并且您说它正在自动启动,那么问题出在哪里?听起来当机器启动boots.nginx时它应该已经启动了,但是django fastcgi部分是一个单独的过程。nginx通过套接字(或命名管道等)与django webapp进程通信(据我所知,是通过fastcgi)。你不能重复让nginx启动django fastcgi服务的过程吗?使用FastCGI,无论服务启动的顺序如何,一旦收到实际请求,它们就会找到对方。我想这就是答案,只是奇怪的是,没有实例!(用于生产Web服务器的OS X?哈哈)如果您已经将FastCGI/nginx设置为通过位于
/System/Library/LaunchDaemons/nginx.plist的文件运行,并且您说它是自动启动的,那么问题出在哪里?听起来当机器启动boots.nginx时它应该已经启动了,但是django fastcgi部分是一个单独的过程。nginx通过套接字(或命名管道等)与django webapp进程通信(据我所知,是通过fastcgi)。你不能重复让nginx启动django fastcgi服务的过程吗?使用FastCGI,无论服务启动的顺序如何,一旦收到实际请求,它们就会找到对方。我想这就是答案,只是奇怪的是,没有实例!(OSX用于生产Web服务器?哈哈)nginx的
mod_wsgi
插件有一些严重的缺点;特别是,一旦python应用程序阻塞,您就会失去nginx的性能优势,django应用程序经常这样做(等待数据库/文件系统调用),虽然我已经在类似的设置上做了很多负载测试;特别是,一旦python应用程序阻塞,您就会失去nginx的性能优势,django应用程序经常这样做(等待数据库/文件系统调用)。谢谢,我完全没有意识到这一点,尽管我已经在类似的设置上做了许多负载测试。