2

我在配置 nginx 以使用 Python3.2 时遇到了一些问题。我也在努力寻找任何类似于该主题的体面教程的东西。然而,我确实找到了一个不错的教程,让 nginx 与 Python2.7 一起玩得很好。我的想法是,由于 uwsgi 与插件一起工作,因此遵循 Python2.7 教程并更换 python 插件应该是一个相对简单的练习。

这是我为使基本的 Hello World 站点正常工作而遵循的教程:https ://library.linode.com/web-servers/nginx/python-uwsgi/ubuntu-12.04-precise-pangolin

/etc/uwsgi/apps_available/my_site_url.xml 看起来像:

<uwsgi>
    <plugin>python</plugin>
    <socket>/run/uwsgi/app/my_site_urlmy_site_url.socket</socket>
    <pythonpath>/srv/www/my_site_url/application/</pythonpath>
    <app mountpoint="/">
        <script>wsgi_configuration_module</script>
    </app>
    <master/>
    <processes>4</processes>
    <harakiri>60</harakiri>
    <reload-mercy>8</reload-mercy>
    <cpu-affinity>1</cpu-affinity>
    <stats>/tmp/stats.socket</stats>
    <max-requests>2000</max-requests>
    <limit-as>512</limit-as>
    <reload-on-as>256</reload-on-as>
    <reload-on-rss>192</reload-on-rss>
    <no-orphans/>
    <vacuum/>
</uwsgi>

一旦一切正常,通过 apt-get 安装 uwsgi-plugin-python3。ls -l /usr/lib/uwsgi/plugins/现在输出:

-rw-r--r-- 1 root root 142936 Jul 17  2012 python27_plugin.so
-rw-r--r-- 1 root root 147192 Jul 17  2012 python32_plugin.so
lrwxrwxrwx 1 root root     38 May 17 11:44 python3_plugin.so -> /etc/alternatives/uwsgi-plugin-python3
lrwxrwxrwx 1 root root     37 May 18 12:14 python_plugin.so -> /etc/alternatives/uwsgi-plugin-python

更改pythonpython3python32在 my_site_url.xml 中具有相同的效果,即:

  • hello world 页面需要很长时间才能加载(之前它实际上是瞬时的)然后出现空白
  • 我站点的访问日志记录访问
  • 我网站的错误日志没有记录新的错误
  • /var/log/uwsgi/app/my_site_url.log 记录以下内容:

    [pid: 4503|app: 0|req: 1/2] 192.168.1.5 () {42 vars in 630 bytes} [Sun May 19 10:49:12 2013] GET / => 在 0 毫秒内生成了 0 个字节(HTTP /1.1 200) 2 个 65 字节的标头(1 个在核心 0 上切换)

所以我的问题是:

如何正确配置此应用程序以在 Python3.2 上运行

4

1 回答 1

2

列出的教程具有以下应用程序代码:

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                    ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

这与 python3.2 不兼容,因为它需要一个字节对象。用以下内容替换应用程序功能可以解决问题:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return b"Hello World"
于 2013-05-19T09:18:40.220 回答