我在 django 中有一个项目,该项目在开发服务器上运行良好,但在托管服务器上运行不佳。
由于我无权访问托管服务器上的控制台,因此我通过复制 python manage.py sql <app name>
的输出来创建表。到托管服务器上 phpMyAdmin 中的 SQL 查询部分。
在我的应用程序中,我有两个模型:
class Question(models.Model):
creationDate = models.DateField('date created', auto_now_add=True, editable=False)
publicationDate = models.DateTimeField('date published', blank=True, null=True, default=None)
author = models.ForeignKey(User)
class Meta:
get_latest_by = "publicationDate"
def __str__(self):
return str(self.id)
class Text(models.Model):
question = models.ForeignKey(Question, db_index=True)
answerId = models.PositiveSmallIntegerField(null=True, blank=True, default=None)
language = models.CharField(max_length=5, default = "uk", choices=settings.LANGUAGES)
text = models.CharField(max_length=255)
imgPath = models.CharField('path to the image representing the question/answer', max_length=255, blank=True)
colourId = models.PositiveSmallIntegerField(blank=True, null=True, default=None)
def __str__(self):
return self.text
我还有 Django 生成的管理页面:
from django.contrib import admin
from survey.models import Question, Text
class TextInline(admin.StackedInline):
fields = (('answerId','language','text','colourId'),)
model = Text
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fields = (('author','publicationDate'),)
inlines = [TextInline]
admin.site.register(Question, QuestionAdmin)
admin.site.register(Text)
现在在开发服务器上一切正常。我可以为每个问题添加问题、不同语言的文本,保存它,然后打开它并查看存储的内容。
在托管服务器上创建问题和文本的部分有效。当我检查 SQL 表时,所有信息都存储在那里。但是当我想在管理 View 中查看保存的问题时,它总是显示问题对象的信息,但有时会显示与其关联的文本对象,但大多数时候都不会显示。
此外,在应在管理 View 中显示可用模型的页面上,文本对象也经常丢失,并且有时会在页面几次重新加载后显示。
对我来说,这看起来像是数据库连接出现问题。
托管使用MySQL 5.5.29,表是使用默认引擎InnoDB创建的。 Django 中的配置如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '?????????',
'USER': '?????????',
'PASSWORD': '??????????',
'ATOMIC_REQUESTS': True,
'CONN_MAX_AGE': 0,
}
}
我尝试改变 CONN_MAX_AGE
和ATOMIC_REQUESTS
参数但没有帮助。
什么会导致这种行为?
最佳答案
这听起来不像是数据库连接问题,这听起来像是以下问题之一:
- 缓存
- 您修改了 python 文件,但尚未重新启动 Web 服务器进程(例如 Apache)来更新 python 文件。
我建议您尝试使用以下方法之一在托管 Web 服务器上重新加载 Python 文件:
$ touch wsgi.py
或
$ sudo service apache2 restart
我假设您的 Web 服务器是 Apache,否则请使用适当的命令重新启动您的 Web 服务器。
关于python - Django + InnoDB : random failure of model reading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23643998/