在OS X引导时自动启动Django FastCGI
我让Django FastCGI/nginx在OS X上运行良好。我从终端开始我的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
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应用程序经常这样做(等待数据库/文件系统调用)。谢谢,我完全没有意识到这一点,尽管我已经在类似的设置上做了许多负载测试。