在Heroku上,locale.getdefaultlocale()返回(None, None),导致Django createsuperuser失败 - 如何修复?
我在使用 heroku python manage.py createsuperuser
命令的时候遇到了一个错误,最后的提示大概是这样的:
File "/usr/local/www/site-python/lib/django-trunk/django/contrib/auth/management/__init__.py", line 85, in get_system_username
return getpass.getuser().decode(locale.getdefaultlocale()[1])
TypeError: decode() argument 1 must be string, not None
我在进入命令行后确认了一下,发现我的 Heroku Cedar 环境中的 locale.getdefaultlocale() 返回的是 (None, None)。我该怎么设置这个地区信息,让 Python 能够识别呢?
1 个回答
17
为了回答我自己的问题:原来这个问题可以通过设置一个Heroku的配置变量来解决,这样就会生成一个环境变量,Python可以读取这个变量,从而返回locale.getdefaultlocale()可以用的值。
在我的情况下,我使用的Heroku设置是:
heroku config:add LANG=en_US.UTF-8
(当然,其他编码方式和特别是语言设置可能对其他人来说也有意义。)
这个设置解决了创建超级用户的问题,目前其他方面也都正常。(还有其他用户报告说,他们在执行syncdb并选择创建超级用户时,也在某些系统上遇到了同样的错误。)
请注意,任何这样的更改都会导致你的实例重启。