mod_wsgi 部署的 Flask 应用程序中 Adafruit_MotorHAT 的权限被拒绝

Permission denied for Adafruit_MotorHAT in mod_wsgi deployed Flask app

我正在开发一个简单的 Flask 应用程序,该应用程序由 RaspberryPi 提供服务,上面堆叠有 Adafruit MotorHat,因此它可以驱动步进电机。当 运行 来自命令行的应用程序一切正常,并且可以通过 Flask 网络界面控制电机。但是,当尝试通过 mod_wsgi 部署应用程序时,我收到以下有关 MotorHat 库的 apache2 错误:

[Mon Dec 11 09:30:32.700209 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416] mod_wsgi (pid=1583): Target WSGI script '/var/www/FlaskApp  /flaskapp.wsgi' cannot be loaded as Python module.
[Mon Dec 11 09:30:32.700330 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416] mod_wsgi (pid=1583): Exception occurred processing WSGI script '/var/www/FlaskApp/flaskapp.wsgi'.
[Mon Dec 11 09:30:32.700405 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416] Traceback (most recent call last):
[Mon Dec 11 09:30:32.700473 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]   File "/var/www/FlaskApp/flaskapp.wsgi", line 7, in <module>
[Mon Dec 11 09:30:32.700665 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]     from FlaskApp import app as application
[Mon Dec 11 09:30:32.700706 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]   File "/var/www/FlaskApp/FlaskApp/__init__.py", line 3, in <module>
[Mon Dec 11 09:30:32.700895 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]     from newsFocus import *
[Mon Dec 11 09:30:32.700933 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]   File "/var/www/FlaskApp/FlaskApp/newsFocus.py", line 14, in <module>
[Mon Dec 11 09:30:32.701313 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]     from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotor, Adafruit_StepperMotor
[Mon Dec 11 09:30:32.701362 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]   File "build/bdist.linux-armv7l/egg/Adafruit_MotorHAT/__init__.py", line 1, in <module>
[Mon Dec 11 09:30:32.701971 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]   File "build/bdist.linux-armv7l/egg/Adafruit_MotorHAT/Adafruit_MotorHAT.py", line 3, in <module>
[Mon Dec 11 09:30:32.702522 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]   File "build/bdist.linux-armv7l/egg/Adafruit_MotorHAT/Adafruit_PWM_Servo_Driver.py", line 11, in <module>
[Mon Dec 11 09:30:32.703070 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]   File "build/bdist.linux-armv7l/egg/Adafruit_MotorHAT/Adafruit_PWM_Servo_Driver.py", line 35, in PWM
[Mon Dec 11 09:30:32.703619 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]   File "build/bdist.linux-armv7l/egg/Adafruit_MotorHAT/Adafruit_I2C.py", line 43, in __init__
[Mon Dec 11 09:30:32.704127 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416]     self.bus = smbus.SMBus(busnum if busnum >= 0 else Adafruit_I2C.getPiI2CBusNumber())
[Mon Dec 11 09:30:32.704204 2017] [wsgi:error] [pid 1583] [client 192.168.0.10:38416] IOError: [Errno 13] Permission denied

我该如何解决这个问题以及哪个用户实际上是 运行 通过 mod_wsgi 部署的应用程序?

运行 Apache 的用户无权访问您尝试访问的任何文件。参见:

虽然这里看起来不像是这种情况,但另一个常见问题是您使用相对路径名而不是绝对路径名。参见:

我建议确保您使用 mod_wsgi 的守护进程模式,并将守护进程的 user/group 设置为有权访问您尝试访问的文件或设备的任何用户。如果使用相对路径并且无法更改它们,还要查看用于设置进程主目录的选项。参见: