Skip to main content
 首页 » 编程设计

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

2024年10月24日32rubylouvre

我很难部署 Bottle 应用程序。我曾尝试使用过去问题中的一些建议答案,但似乎无法正常工作。我最终遇到了 500 Internal Server Error

这是我的设置。

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

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

/var/www/bottle_app/

  • 应用程序.wsgi
  • 应用.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 安装上执行了此操作。这可能是我第 10 次使用来自有类似问题的用户的其他问题的不同建议进行重建。我试图避免发布一个看起来重复的问题。任何帮助将不胜感激。

请您参考如下方法:

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

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

更简洁的方法可能是使用 WSGIDaemonProcess 的 home 或 python-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__)))