【问题标题】:running Apache + Bottle + Python运行 Apache + Bottle + Python
【发布时间】:2013-07-14 17:19:57
【问题描述】:

我正在尝试使用 Apache 和 mod_wsgi 运行 Bottle.py。

我在 Windows 上运行它,使用 xampp。蟒蛇v2.7

我在 httpd 中的 Apache 配置:

<VirtualHost *>
    ServerName example.com
    WSGIScriptAlias / C:\xampp\htdocs\GetXPathsProject\app.wsgi
    <Directory C:\xampp\htdocs\GetXPathsProject>
            Order deny,allow
            Allow from all
    </Directory>
</VirtualHost>

我的 app.wsgi 代码:

import os
os.chdir(os.path.dirname(__file__))
import bottle
application = bottle.default_app()

我的hello.py:

from bottle import route
@route('/hello')
def hello():
    return "Hello World!"

当我转到 localhost/hello 时,我收到 404 错误。 我在 Apache 日志文件上没有任何其他错误,可能缺少一些基本内容。

【问题讨论】:

  • 遇到同样的问题 =\

标签: python apache mod-wsgi bottle


【解决方案1】:

我没有看到任何地方引用了您的 hello.py。

您应该将 hello.py(route)的内容放入 app.wsgi。

【讨论】:

  • 嘿,听起来合乎逻辑,但你能显示我需要添加的代码吗?
  • 当然,我现在正在用手机旅行;当我回到电脑时会发布代码。但基本上它只是将您的两个文件合并为一个。如果您不想等我回到笔记本电脑上,请尝试一下。 :)
  • 好吧,我试过了,但不能让它与 apache 一起工作,但现在我设法在没有 apache 的情况下运行它,只是在 apache 关闭时使用 run() 命令,但我会更开心如果我能够让它与 apache 一起工作
  • 好的,看起来你采纳了我的建议(来自另一个答案)并让它发挥作用,所以我现在不会发布任何代码。很高兴听到您准备就绪。
  • 不需要将hello.py的内容放到app.wsgi中。请查看我的回答,了解如何实现。
【解决方案2】:

从您的 wsgi 文件到您的 hello.py 文件没有连接点。
hello.py 中的内容放入 app.wsgi 并重新启动您的网络服务器。
那应该可以解决问题。

要使您的应用程序模块化以便您可以将代码放入各种文件中,请查看 Bottle 的等效蓝图(由 Flask 框架使用)

【讨论】:

    【解决方案3】:

    我正在为与我遇到相同问题的人添加我的结论: 像 Kneel-Before-ZOD 和 ron.rothman 一样,我不得不在 WSGI 文件中编写我的代码,因为 python 从那里运行代码,但是如果你想获得自己的 py 文件,你必须从 WSGI 文件中导入它们,比如那:

    from hello import application
    

    “hello”是 python 文件名,“应用程序”是你应该写在你的 py 文件而不是 wsgi 中的东西:

    application = bottle.default_app()
    

    每次我进行更改时也必须重新启动 apache(我不知道 - 这就是它让我发疯的原因)。 tnx 给那些帮助过我的人。 好运气。

    【讨论】:

    • 提示:如果您使用bottle.run(reloader=True),那么每次进行更改时都不必重新启动apache。
    • 不幸的是你不能用 apache 运行 :(
    【解决方案4】:

    或者 Duan 的 cmets 是我分离 app.wsgi 和应用程序 python 文件的一个很好的起点。但它们对我来说有点神秘。搞砸了几个小时后,这对我有用:
    [顺便说一句,我正在使用 OSX。请根据您的操作系统调整路径、用户、组]

    /Library/WebServer/Documents/hello_app/app.wsgi:

    import sys
    
    sys.path.insert(0, "/Library/WebServer/Documents/hello_app")
    
    import bottle
    import hello
    application = bottle.default_app()
    

    /Library/WebServer/Documents/hello_app/hello.py:

    from bottle import route
    
    @route('/hello')
    def hello():
        return "Hello World!"
    

    /etc/apache2/extra/httpd-vhosts.conf:

    <VirtualHost *:80>
        ServerName xyz.com
    
        WSGIDaemonProcess hello_app user=_www group=_www processes=1 threads=5
        WSGIScriptAlias /v1 /Library/WebServer/Documents/hello_app/app.wsgi
    
        <Directory /Library/WebServer/Documents/hello_app>
            WSGIProcessGroup hello_app
            WSGIApplicationGroup %{GLOBAL}
            Order deny,allow
            Allow from all
        </Directory>
    </VirtualHost>
    

    别忘了重启你的 apache 服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-19
      • 2015-02-11
      • 2012-10-15
      • 2019-05-05
      • 1970-01-01
      • 2013-10-22
      • 2018-10-05
      • 2014-10-23
      相关资源
      最近更新 更多