部署在 Heroku 上的应用程序不显示来自 MySql 数据库的数据

App deployed on Heroku doesn't show data from MySql DB

在开发中,我使用以下设置为我的 Django 项目设置了一个聪明的云 MySQL 数据库:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db-name',
        'HOST': 'db-name-mysql.services.clever-cloud.com',
        'PORT': 3306,
        'PASSWORD': 'password',
        'USER': 'user'
    }
}

它工作正常,所以我在这个数据库上创建了一些数据进行测试。

我在 Heroku 上部署了这个应用程序,当我成功部署它时,我意识到 Heroku 上显示的数据与我聪明的云数据库不同。我不知道 Heroku 是否正在使用其他数据库或者为什么不使用我的数据库。

原答案

Clever Cloud 和 Heroku 是两种不同的服务。我不认为你可以在另一个中使用数据库,我也不明白你为什么会这样做。为什么不同时使用 Clever Cloud,保留您的数据库并将您的应用程序部署到 Clever Cloud?要部署到 Clever Cloud,请查看他们的 docs.

现在,如果您想将应用程序部署到 Heroku,最好的办法是迁移到 postgres,因为这是 Heroku 的原生数据库。但是,如果您愿意,可以 在 Heroku 上使用 MySQL。为此,您可以使用 Heroku 提供的插件 ClearDB MySQL addon from Heroku.

编辑

虽然我仍然认为我的建议是正确的,但我的回答可能不是。您应该能够在 Heroku 应用程序中使用外部数据库,只要该外部应用程序接受来自 Heroku 的连接。正如 Shan Valleru 的 answer 所描述的那样,这很容易做到。基本上你只需要 运行

heroku config:add DATABASE_URL=mysql://user:password@db-name-mysql.services.clever-cloud.com:3306/db-name
heroku config:add SHARED_DATABASE_URL=mysql://user:password@db-name-mysql.services.clever-cloud.com:3306/db-name

然后做

heroku restart

您可以在 Heroku 面板中将这些变量更改为 d1jhoni1b 在他的 answer 中描述:

1 - create mysql db
2 - create mysql db user (set defaults)
3.1 - Go to your Heroku panel/Config Vars
3.2 - Click on "Reveal Vars" and edit (clicking on pencil icon) on the one you want to change in this case DATABASE_URL (if not present just a new one with DATABASE_URL as the name)