Cai*_*ker 1 python service flask gunicorn raspberry-pi
我编写了一个 Flask 应用程序,它与 Gunicorn 一起提供服务并在 Raspberry Pi OS (Buster) 上运行。该应用程序应该在系统启动时作为服务自动运行。问题是,应用程序在作为服务运行时失败......但仅当作为服务运行时......
它曾经一直有效,直到我将服务器挂钩引入到我的 Gunicorn 配置文件中。其中有几个,但第一个被调用并因此失败的是:
Gunicorn.conf.py:
def on_starting(server):
import wsgi
wsgi.on_starting(server)
Run Code Online (Sandbox Code Playgroud)
wsgi.py:
def on_starting(server):
api_instance = server.app.wsgi()
shared_memory_manager = Manager()
api_instance.requestless_variables = shared_memory_manager.dict()
api_instance.log = server.log
server.log.info("Loading API...")
Run Code Online (Sandbox Code Playgroud)
具有以下回溯:
Traceback (most recent call last):
File "/home/pi/.local/bin/gunicorn", line 8, in <module>
sys.exit(run())
File "/home/pi/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 67, in run
WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
File "/home/pi/.local/lib/python3.8/site-packages/gunicorn/app/base.py", line 231, in run
super().run()
File "/home/pi/.local/lib/python3.8/site-packages/gunicorn/app/base.py", line 72, in run
Arbiter(self).run()
File "/home/pi/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 198, in run
self.start()
File "/home/pi/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 138, in start
self.cfg.on_starting(self)
File "/home/pi/nano/manager/src/api/gunicorn.conf.py", line 56, in on_starting
api_instance = server.app.wsgi()
File "/home/pi/.local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/home/pi/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
return self.load_wsgiapp()
File "/home/pi/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
return util.import_app(self.app_uri)
File "/home/pi/.local/lib/python3.8/site-packages/gunicorn/util.py", line 430, in import_app
raise AppImportError("Application object must be callable.")
gunicorn.errors.AppImportError: Application object must be callable.
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,错误似乎与 相关api_instance = server.app.wsgi(),它出现在我的每个服务器挂钩中,同样也是我每个服务器挂钩中的故障点。
最奇怪的事情是,如果直接从终端实例化,应用程序/Gunicorn 可以完美工作:
但如果从以下服务/home/pi/.local/bin/gunicorn -c /home/pi/nano/manager/src/api/gunicorn.conf.py --bind unix:nano_api.sock --umask 007
实例化,则会产生上述错误:
[Unit]
Description=Gunicorn instance serving the Nano API
After=network.target
[Service]
User=pi
Group=www-data
WorkingDirectory=/home/pi/nano/manager/src/api
ExecStart=/home/pi/.local/bin/gunicorn -c /home/pi/nano/manager/src/api/gunicorn.conf.py --bind unix:nano_api.sock --umask 007
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
任何人都对可能导致此问题的原因以及如何解决它有任何想法吗?非常感谢!
嗯,经过10个小时的调试,我终于解决了问题......
我很惭愧地说这只是命名冲突。我有一个名为“api”的包,其中包含一个名为“api.py”的模块,该模块包含一个名为“api”的 Flask 实例,你猜对了。
由于我给这三个项目起了不同的名称并修复了我的引用,一切都进展顺利。
| 归档时间: |
|
| 查看次数: |
2281 次 |
| 最近记录: |