我在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生成的Admin页面:
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表时,所有信息都存储在那里。但是当我想在Admin视图中查看已保存的问题时,它总是显示Question对象的信息,但有时会显示与之关联的Text对象,但大多数时候都没有显示。
此外,在应在Admin视图中显示可用模型的页面上,Text对象也经常丢失,并且有时会在少量重新加载页面后显示。
对我而言,与数据库连接似乎有些问题。
主机使用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
参数,但它没有帮助。
什么可能导致这种行为?
答案 0 :(得分:1)
这听起来不像数据库连接问题,这听起来像下列之一:
我建议您尝试使用以下方法之一在托管Web服务器上重新加载python文件:
$ touch wsgi.py
或
$ sudo service apache2 restart
我假设您的Web服务器是Apache,否则使用适当的命令重新启动您的Web服务器。