Heroku 上的 Django 不允许我创建超级用户

4

我已经将一个Django应用程序部署到Heroku上。在本地运行时,此应用程序完美运行。但是,当我尝试在Heroku应用程序上创建超级用户以便访问管理页面时,出现了问题。我已经执行了以下操作:

heroku run python manage.py syncdb
heroku run python manage.py migrate
heroku run python manage.py createsuperuser

看起来它可行。我收到选择密码、电子邮件和用户名的提示。然后它陈述:

Superuser created successfully.

然而,当我尝试在管理员面板中登录时,用户名密码组合失败。当我尝试通过以下方式更改帐户密码时:

heroku run python manage.py changepassword admin

I get:

CommandError: user 'admin' does not exist

显然,Heroku从未创建超级用户。我已经束手无策了,我不明白Heroku动力单元出了什么问题。

我以前没有使用过Heroku,但我的猜测是,您是否尝试重新启动服务器(Nginx,Apache或其他)然后再尝试登录?也许需要重新启动服务器。此外,如果您执行“python manage.py shell”,能否看到“adim”用户?最后,在登录时,请确保在要求用户名时不要意外使用电子邮件,反之亦然。 - SilentDev
只要您的设置正确,针对生产环境而非本地环境,您可以像普通用户一样注册管理员,然后进入shell并升级为超级用户。 - Anzel
显然,我忘记在我的settings.py文件中取消注释一行代码,导致开发sqlite数据库被推送到服务器上。然后服务器从中正常工作,但无法在表格中注册新行。感谢您的帮助! - Peter
你取消了哪一行的注释?遇到了同样的问题! - giaggi
3个回答

1

对我来说,只需运行heroku run python manage.py createsuperuser就可以了。但是@Nils,我想知道你在settings.py文件中需要调整哪一行才能使其在生产环境中正常工作。


1
看起来您正在使用类似sqlite的保险丝系统数据库。
正如您所知,Heroku拥有短暂的文件系统

Heroku文件系统是短暂的 - 这意味着当dyno运行时对文件系统进行的任何更改只会持续到该dyno关闭或重新启动。每个dyno从最近的部署中启动干净的文件系统副本。

这就是为什么创建用户sun成功,但在下一条命令(更改密码)时该用户不存在的原因。
我主要为了未来遇到同样问题的用户编写此答案。

0

为了查看发生了什么,请尝试运行以下代码两次:

heroku run python manage.py migrate
heroku run python manage.py migrate

在一个良好的设置下,第一次运行迁移,第二次将会显示“没有可应用的迁移”。如果你看到它两次运行相同的迁移,这意味着你在Heroku上的数据库没有从一次调用持久化到下一次,你需要改变你的数据库设置,例如通过连接一个postgres数据库

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接