nginx之使用 UWSGI 和 NGINX 服务 Pyramid 应用程序

Renyi-Fan 阅读:21 2024-10-24 08:47:37 评论:0

我是 NGINX、uWSGI 和 Pyramid 的新手,我正在尝试使用 nginx 作为反向代理通过 uWSGI 为 Pyramid 应用程序提供服务。我现在真的被困住了,希望有人能就如何解决这个问题提出一些建议。如果您能稍微解释一下可能会发生什么,那也会有所帮助,因为我的理解非常有限!

目前,当我访问反向代理 URL 时,我从 uWSGI 收到一个“内部服务器错误”。在 uWSGI 错误日志中,我收到错误:

--- no python application found, check your startup logs for errors --- 

当我单独通过 uWSGI 服务并使用 pserve 启动时,应用程序工作正常。我可以按如下方式从我的虚拟信封中启动它:

bin/pserve my-app/uwsgi.ini 

但是当我启动 nginx 并访问代理地址时,我得到了内部服务器错误。

我在uwsgi.ini中的设置如下:

[app:main] 
use = egg:myapp 
pyramid.reload_templates = true 
pyramid.debug_authorization = false 
pyramid.debug_notfound = false 
pyramid.debug_routematch = false 
pyramid.default_locale_name = en 
pyramid_debugtoolbar 
[server:main] 
use = egg:waitress#main 
host = 0.0.0.0 
port = 6543 
 
[loggers] 
keys = root, musiccircle 
 
[handlers] 
keys = console 
 
[formatters] 
keys = generic 
 
[logger_root] 
level = ERROR 
handlers = console 
[logger_musiccircle] 
level = ERROR 
handlers = 
qualname = musiccircle 
 
[handler_console] 
class = StreamHandler 
args = (sys.stderr,) 
level = NOTSET 
formatter = generic 
 
[formatter_generic] 
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s 
 
[uwsgi] 
socket = unix://home/usr/env/myapp/myapp.sock 
master = true 
 
processes = 48 
cpu-affinity = 12 
 
harakiri = 60 
post-buffering = 8192 
buffer-size = 65535 
 
daemonize = ./uwsgi.log 
pidfile = ./pid_5000.pid 
 
listen = 32767 
 
reload-on-as = 512 
reload-on-rss = 192 
limit-as = 1024 
no-orphans = true 
reload-mercy = 8 
log-slow = true 
 
virtualenv = /home/usr/env 

在 nginx 中相应的 myapp.conf 文件中,我有以下内容:

upstream myapp { 
    server 127.0.0.1:6543; 
} 
 
server { 
    listen          8080; 
    server_name myapp.local www.myapp.local; 
    location = /favicon.ico { access_log off; log_not_found off; } 
    location /static/ { 
        root /home/usr/env/myapp; 
    } 
    access_log      /var/log/nginx/access.log; 
    error_log       /var/log/nginx/error.log; 
 
    charset         utf-8; 
    location / { 
        include         uwsgi_params; 
        uwsgi_pass      unix://home/usr/env/myapp/myapp.sock; 
    } 
} 

如果您需要查看其他内容,请告诉我。如您所见,Nginx 配置为在端口 8080 提供服务(它确实如此),而 Pyramid 应用程序由 uWSGI 提供给端口 6543(它确实如此)。

提前致谢。

请您参考如下方法:

似乎 Pyramid 项目旨在安装(setup.py),然后使用 .ini 配置文件运行 保存。 Pserve 然后在运行时将这些配置文件详细信息作为 **settings 传递给您的 Pyramid 应用程序。

这与 Flask 不同,后者未安装 并且通常没有 配置文件。这样的 Flask 应用程序可以根据需要由 uWSGI 运行,所有运行时配置都由 uWSGI 或环境变量处理。

由于 Pyramid 通常在运行时需要一个配置文件,并且在使用配置文件时依赖 pserve 来提供它们(即 production.ini),我认为你必须运行 uwsgi --ini-paste production.ini(或者如果使用 Pypy 运行,uwsgi --pypy-paste production.ini)(感谢@Sorrel)


标签:nginx
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号