我有一个由Heroku托管的Django项目,一个(postgresql)数据库,一个与该数据库交互的应用程序(在web dyno上),还有一个应该与数据库交互的工作者。
应用程序要求工作人员在后台执行长时间运行的任务,就像一些数据库查询一样。但是,我在实现这个方面遇到了麻烦。我认为问题是工作人员无权访问数据库。我看到的具体错误是:
app[worker.1]: ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
这对我来说并不合理,因为来自工人的错误。设置正在加载正常 - 网络dyno上的所有内容都按预期工作。我唯一能想到的是,工作人员无法访问已配置的设置,包括数据库凭据。
如何解决此问题?
修改 这是Procfile:
web: gunicorn myapp.wsgi --log-file -
worker: python launchworker.py
正如那里指出的那样,工作人员是作为Heroku工作者启动的,它根本不会运行Django项目(据我所知,如果它是管理命令的话)。 This was the method recommended by Heroku.