Python django项目中的自定义statup代码应该位于何处?
当我在当前项目中切换到gunicorn时,我明白我在启动时处理模型缓存的方式不是一种好方法 背景 应用程序名称:网站 项目名称:个人_cms 有几个型号我配备了加载方法 通常,每当模型中发生变化时,信号就会调用这些方法。为了在启动服务器时加载它们,我在wsgi.py中添加了以下内容: 问题 上面的代码可以工作,但只在使用python manage.py runserver时使用,而不是gunicorn personal_cms.wsgi:application。据我所知,原因是运行manage.py有一个特定的上下文。没有它,gunicorn点击wsgi.py时不会加载应用程序:Python django项目中的自定义statup代码应该位于何处?,python,django,gunicorn,startup,wsgi,Python,Django,Gunicorn,Startup,Wsgi,当我在当前项目中切换到gunicorn时,我明白我在启动时处理模型缓存的方式不是一种好方法 背景 应用程序名称:网站 项目名称:个人_cms 有几个型号我配备了加载方法 通常,每当模型中发生变化时,信号就会调用这些方法。为了在启动服务器时加载它们,我在wsgi.py中添加了以下内容: 问题 上面的代码可以工作,但只在使用python manage.py runserver时使用,而不是gunicorn personal_cms.wsgi:application。据我所知,原因是运行manage.
现在想想,从项目的wsgi.py加载应用程序的模型似乎是错误的。那么,我应该在哪里调用load方法,以便在启动时缓存模型,而不管选择的是wsgi服务器?所有启动代码都应该放在AppConfig的ready方法中。然后在ibu应用程序上引用config类,而不是应用程序名称。这保证在启动时调用
请看我尝试了它,但问题是,当我第一次初始化应用程序docker compose up表的实例时,它还不存在,我得到了一个django.db.utils.ProgrammingError:1146,表“cms\u db\u prod.website\u somemodel”不存在。在这一点上我有点犹豫:即使在entrypoint.sh中添加python manage.py migrate,我也会遇到这个错误,但这与我认为devop部分不正确有关。谢谢你的回答@Daniel
class SomeModel(models.Model):
something = models.CharField(max_length=60)
something_else = models.URLField()
@classmethod
def load(cls):
cache.set('{}'.format(cls.__name__), cls.objects.all(), None)
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'personal_cms.settings')
from website.models import SomeModel, SomeOtherModel
SomeModel.load()
SomeOtherModel.load()
application = get_wsgi_application()
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.