【问题标题】:Django cannot save postgresql instance on herokuDjango 无法在 heroku 上保存 postgresql 实例
【发布时间】:2013-10-09 14:16:34
【问题描述】:

我是 Django 和 Heroku 的新手。我刚刚按照 heroku 文档部署了我的项目。 settings.py 的一部分是:

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'dfuldndi54p56q',
    'HOST': 'ec2-54-227-251-13.compute-1.amazonaws.com',
    'PORT': 5432,
    'USER': 'pmotmgcaijwixy',
    'PASSWORD': 'Wp0Gjf66JEC4mRKkvKrF22ptnj'
  }
}

# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] = dj_database_url.config()

models.py 的一部分

class userInfo(models.Model):
    """The member information
    """

    email = models.EmailField()
    password = models.TextField()
    account = models.CharField()
    gender = models.CharField()
    iconID = models.IntegerField()
    gymID = models.IntegerField()
    friendsNumber = models.IntegerField()
    signature = models.CharField()
    weibo = models.BooleanField()

在 registerBasicInfo.py 中:

try:
    userInfo.objects.exists()
except DatabaseError:
    user = userInfo()
else:
    user = userInfo.objects.filter(email = email)

    if user:
        # check if the account is fully registered

        if user.gymID:
            return HttpResponse(content = 'user exist', status = 503)

user.email = email
pwmd5 = hashlib.md5(password)
user.password = pwmd5.hexdigest()

user.save()

我推送到heroku&syncdb后,出现如下错误:

2013-10-03T01:40:49.936828+00:00 app[web.1]: Internal Server Error: /ios/registerBasicInfo/json
2013-10-03T01:40:49.936828+00:00 app[web.1]: Traceback (most recent call last):
2013-10-03T01:40:49.936828+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 115, in get_response
2013-10-03T01:40:49.936828+00:00 app[web.1]:     response = callback(request, *callback_args, **callback_kwargs)
2013-10-03T01:40:49.936828+00:00 app[web.1]:   File "/app/server/ios/registerBasicInfo.py", line 50, in post
2013-10-03T01:40:49.936828+00:00 app[web.1]:     user.save()
2013-10-03T01:40:49.936828+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/base.py", line 546, in save
2013-10-03T01:40:49.936828+00:00 app[web.1]:     force_update=force_update, update_fields=update_fields)
2013-10-03T01:40:49.936828+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/base.py", line 650, in save_base
2013-10-03T01:40:49.936828+00:00 app[web.1]:     result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
2013-10-03T01:40:49.937035+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/manager.py", line 215, in _insert
2013-10-03T01:40:49.937035+00:00 app[web.1]:     return insert_query(self.model, objs, fields, **kwargs)
2013-10-03T01:40:49.937035+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py", line 1675, in insert_query
2013-10-03T01:40:49.937035+00:00 app[web.1]:     return query.get_compiler(using=using).execute_sql(return_id)
2013-10-03T01:40:49.937035+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 937, in execute_sql
2013-10-03T01:40:49.937035+00:00 app[web.1]:     cursor.execute(sql, params)
2013-10-03T01:40:49.937035+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/util.py", line 41, in execute
2013-10-03T01:40:49.937035+00:00 app[web.1]:     return self.cursor.execute(sql, params)
2013-10-03T01:40:49.937035+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 58, in execute
2013-10-03T01:40:49.937035+00:00 app[web.1]:     six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
2013-10-03T01:40:49.937192+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 54, in execute
2013-10-03T01:40:49.937192+00:00 app[web.1]:     return self.cursor.execute(query, args)
2013-10-03T01:40:49.937192+00:00 app[web.1]: DatabaseError: current transaction is aborted, commands ignored until end of transaction block

有解决办法吗?我受苦了几天,感谢您的帮助!

【问题讨论】:

    标签: python django postgresql heroku


    【解决方案1】:

    问题解决了。我没有为我的应用程序正确创建模型表,具体来说,我没有正确地将我的应用程序放入 settings.py 的 INSTALLED_APPS 中。非常基本和愚蠢的问题...

    【讨论】:

      【解决方案2】:

      将您的代码更新为:

      user = userInfo.objects.get_or_create(email=email)
      if user.gymID:
          return HttpResponse(content = 'user exist', status = 503)
      
      pwmd5 = hashlib.md5(password)
      user.password = pwmd5.hexdigest()
      user.save()
      

      另外,不要使用md5 作为密码;而是使用set_password

      【讨论】:

      • 尝试使用 user = userInfo.objects.get_or_create(email=email),但仍然出现同样的错误
      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2011-12-09
      • 1970-01-01
      相关资源
      最近更新 更多