【问题标题】:How are web apps written in Python deployed?用 Python 编写的 Web 应用程序是如何部署的?
【发布时间】:2011-09-13 05:37:06
【问题描述】:

我是一名前 PHP 开发人员,我正在努力克服我可以编写 nginx 配置脚本、创建目录、启动 nginx + PHP-FPM、上传我的代码并让它运行的心态。我想开始使用 Python 来感受它并开始创建 Web 应用程序,但我对如何让它全部工作感到有点迷茫。

虽然有些人的建议总是使用 Django 之类的框架,但我想看看这一切是如何自下而上地工作的。

我遇到了 Python Web 服务器的比较,看来 gevent 是我正在寻找的。但是这一切是如何结合在一起的呢?我仍然需要 nginx(静态内容除外)作为反向代理,还是我做一些不同的事情?我正面临“初学者失明”,我正在努力了解这一切是如何结合在一起的。

【问题讨论】:

    标签: python nginx gevent


    【解决方案1】:

    我自己也是一名 Python 初学者,所以我也有同样的问题。也许更高级的用户可以填写详细信息。这是我到目前为止所做的:

    最简单的入门方法是简单地制作一个可执行的 Python 脚本 (.py) 并将其放入您的 cgi-bin。然后,您可以通过 yourhost.com/cgi-bin/your_script.py 访问它。操作简单,易于用于表单处理等。

    某些服务器会要求您重新启动服务器,然后它才能“看到”新的 .py 脚本,这对于快速开发来说可能非常烦人。这也是很多人使用 WSGI 等中间件的原因之一。以下是我修改 Apache 配置以启用 WSGI 的方法:

    LoadModule wsgi_module libexec/apache2/mod_wsgi.so
    
    <VirtualHost *:80>
    
    WSGIScriptAlias /myapp /Library/WebServer/wsgi-scripts/views.wsgi
    
    <Directory /Library/WebServer/wsgi-scripts>
    Order allow,deny
    Allow from all
    </Directory>
    
    </VirtualHost>
    

    views.wsgi 只是一个 Python 脚本。现在,如果我转到 localhost/myapp/anything,它将重定向到 views.wsgi。最好不要将此文件放在根目录下,否则将无法引用静态文件。

    一个简单的应用程序可能看起来像这样:

    def application(environ, start_response):
        start_response('200 OK', [('content-type', 'text/html')])
        return ['Hello world!']
    

    environ 包含有关用户尝试到达的路径的信息,因此您可以设置一个 URL 列表,并告诉您的程序根据请求的 URL 调用哪个函数。像这样的:

     path      = environ.get('PATH_INFO','')
     if path.startswith('/helloworld'):
      # call your function that returns HTML code
    

    我还没有处理太多框架(例如 Django),但我认为其中一个优点是它们可以轻松地使用从脚本传递的任何变量来填写 HTML 模板。 Django 的模板引擎允许包含变量以及与 HTML 混合的逻辑(if、for 等)。当函数被调用时,它返回的任何东西都会发送给客户端。

    我对这一切还是很陌生,所以如果这里有任何错误,请纠正我......

    【讨论】:

      【解决方案2】:

      Python 与 PHP 略有不同。 Python 的一个好处是,在标准中定义了一个通用接口,该标准允许人们在一侧使用各种 Python 应用程序,而在另一侧使用不同的 Web 服务器。它被称为 WSGI,你可以阅读更多关于它的信息here

      here 是一篇关于通过 ngnix 部署 Django 应用程序的好帖子。

      【讨论】:

      • 这并不能真正回答我的问题,我现在不想使用 Django 或任何其他框架。
      • 这个答案可能比你想象的更多地与你的问题有关,除了 Django。
      【解决方案3】:

      你需要一些软件来执行你的 pyton 代码..

      您可以使用tornado 尝试 100% python 堆栈

      或者您可以使用 Apache、Nginx 或 Lighttpd(我认为都是用 C 编写的),然后使用一些 mod(mod_wsgi、fgci 或 uWsgi)以使该网络服务器使用 wsgi 接口运行您的代码。第二个选项就像 apache+some_mod 运行您的 PHP 代码所做的那样。

      我有在 Apache+mod_wsgi 和 Nginx+uWsgi 上运行的生产站点

      【讨论】:

        猜你喜欢
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        相关资源
        最近更新 更多