python - 在 Ubuntu 16.04 上使用 Apache mod_wsgi 部署 Bottle.py 应用程序

标签 python apache mod-wsgi bottle

我在部署 Bottle 应用程序时遇到了困难。我尝试过使用过去问题中的一些建议答案,但似乎无法正常工作。我最终遇到了 500 内部服务器错误

这是我的设置。

  • Ubuntu 16.04
  • Apache
  • libapache2-mod-wsgi-py3
  • Python 3.5

我的 .wsgi 和 app.py 文件位于:

/var/www/bottle_app/

  • app.wsgi
  • app.py

app.wsgi如下

import os
# Change working directory so relative paths (and template lookup) work again
os.chdir(os.path.dirname(__file__))

import bottle
# ... build or import your bottle application here ...
import app
application = bottle.default_app()

app.py如下

from bottle import route
@route('/')
def hello():
    return 'Hello world'

Apache .conf 文件:

<VirtualHost *:80>
ServerName example.com 

WSGIDaemonProcess bottle_app user=bottle group=www-data processes=1 threads=5
WSGIScriptAlias / /var/www/bottle_app/app.wsgi

<Directory /var/www/bottle_app>
    WSGIProcessGroup bottle_app
    WSGIApplicationGroup %{GLOBAL}
    Require all granted
</Directory>

当我运行 python3 app.py 时,没有返回任何内容(我假设这是预期的) 当我运行 python3 app.wsgi 时,我得到:

Traceback (most recent call last):
File "app.wsgi", line 3, in <module>
  os.chdir(os.path.dirname(__file__))
FileNotFoundError: [Errno 2] No such file or directory: ''

我的 Apache 错误日志显示以下错误。

Target WSGI script '/var/www/bottle_app/app.wsgi' cannot be loaded as Python module
Exception occurred processing WSGI script '/var/www/bottle_app/app.wsgi
Traceback (most recent call last):
File "/var/www/bottle_app/app.wsgi", line 7, in <module>
   import app
ImportError: No module named 'app'

我在具有 sudo 权限的用户 Bottle 下进行了干净的 Ubuntu 安装。这可能是我第十次使用有类似问题的用户的其他问题的不同建议进行重建。我试图避免发布一个看起来重复的问题。任何帮助将不胜感激。

最佳答案

在 app.wsgi 文件中导入应用程序模块之前,请尝试:

import sys
sys.path.insert(0, '/var/www/bottle_app')

更简洁的方法可能是使用 WSGIDaemonProcesshomepython-path 参数。 Apache 配置中的条目。

WSGIDaemonProcess bottle_app user=bottle group=www-data processes=1 threads=5 python-path=/var/www/bottle_app

__file__ 不是绝对的,因此如果您需要获取它的位置用于此类目的(其中像 Apache 这样的控制进程可能会使用路径做一些有趣的事情),请尝试:

os.chdir(os.path.dirname(os.path.abspath(__file__)))

关于python - 在 Ubuntu 16.04 上使用 Apache mod_wsgi 部署 Bottle.py 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36901905/

相关文章:

python - 在同一个 apache 服务器上运行 django 和 flask

python:WSGI 应用程序中的 APScheduler

python - stormpath 无法为谷歌登录目录创建组

python - Pandas 从字符串列中删除非字母数字字符

Apache ErrorDocument 404 位于没有 .htaccess 的子目录中

mysql - 切勿将容器设置为 'up' [docker]

java - 在 Java httpclient 中设置用户代理并允许重定向到 true

python - 使用 Python 进行套索回归 : Simple Question

python - 生成一个循环以达到特定结果

python - 从 mod_python 转换为 mod_wsgi