我遇到了一个难以重现的奇怪问题(两天前一切正常,但从那时到现在的一段时间内不再起作用——在此期间没有任何变化!)
我有一个 django 服务器程序,我们通过 gunicorn 运行该程序,该程序具有多个工作子进程和一个单独的小型 REST Web 服务,它共享服务器程序的 settings.py 并作用于相同的 DB 对象。这个服务器程序的代码大致如下:
# my app's models.py
class TestConfig(models.Model):
## various attributes
class Test(models.Model):
## some attributes
def startTest(self):
return TestExecution.objects.create(test=self)
class TestExecution(models.Model):
test = models.ForeignKey(
Test,
on_delete=models.CASCADE
)
config = models.ForeignKey(
TestConfig,
on_delete=models.CASCADE,
null=True
)
# excerpt from a post() method in my app's views.py
test = Test.objects.get(test_id)
if config_form.is_valid():
config = config_form.save()
config_id = config.id
test_exe = test.startTest()
test_exe.config = config
test_exe.save()
webservice_response = requests.get(
'http://{}:{}/rest/add_to_queue/{}'.format(
webservice_ip, webservice_port, test_exe.id))
与 django 服务器程序共享相同 settings.py 的另一个程序(小型 REST Web 服务)如下所示:
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
import django
django.setup()
# the REST endpoint referenced from the django server program
@app.route('/rest/add_to_queue/<test_exe_object_id>/')
@app.route('/rest/add_to_queue/<test_exe_object_id>')
def add_to_queue(test_exe_object_id):
from myapp.models import TestExecution
try:
exe_object = TestExecution.objects.get(pk=int(test_exe_object_id))
# for completeness the database section of my settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_db',
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
正如我所提到的,几天前一切正常,然后当我今天再次尝试时,当我尝试使用它的“id”“get()”TestExecution 对象时,我在第二个程序中得到了一个 DoesNotExist。