0

我遇到了一个难以重现的奇怪问题(两天前一切正常,但从那时到现在的一段时间内不再起作用——在此期间没有任何变化!)

我有一个 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。

4

0 回答 0