【问题标题】:Running manage.py on Heroku for Flask app gives "could not connect"在 Heroku for Flask 应用程序上运行 manage.py 给出“无法连接”
【发布时间】:2020-10-17 18:10:36
【问题描述】:

我正在尝试在我的 Flask 应用程序上使用 heroku run python manage.py db migrate 迁移我在 Heroku 上的数据库。但是我收到了这个错误:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection 
refused
        Is the server running on host "localhost" (127.0.0.1) and accepting
        TCP/IP connections on port 5432?

这是我的manage.py 文件的代码:

import os
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app import create_app, db

app=create_app()

with app.app_context():

    migrate = Migrate(app, db)
    manager = Manager(app)

    manager.add_command('db', MigrateCommand)


if __name__ == '__main__':
    manager.run()

这是数据库的配置文件:

import os

class Config:
    SECRET_KEY= os.environ.get('SECRET_KEY')
    SQLALCHEMY_DATABASE_URI= os.environ.get('SQLALCHEMY_DATABASE_URI')
    MAIL_SERVER='smtp.googlemail.com'
    MAIL_PORT=587
    MAIL_USE_TLS = True
    MAIL_USERNAME= os.environ.get('EMAIL_USER')
    MAIL_PASSWORD= os.environ.get('EMAIL_PASS')

我已将sqlalchemy_database_uri 设置为PostgreSQL 中的数据库,格式为postgres://YourUserName:YourPassword@YourHost:5432/YourDatabase。 这个错误一直困扰着我,我无法在任何地方找到解决方案。

为什么这不起作用?

【问题讨论】:

    标签: python flask heroku migrate


    【解决方案1】:

    您无法将 Heroku 应用程序连接到本地数据库而没有一些主要缺点。设置起来非常痛苦(您需要处理端口转发,可能至少需要一个防火墙,可能还有动态 IP 地址,...)如果您的笔记本电脑关闭,您的应用程序将无法运行。

    更好的解决方案是在云中拥有一个数据库,鉴于您已经在使用 Heroku 和 PostgreSQL,最自然的选择是Heroku's own Postgres service。如果您依赖psycopg2,很有可能已经为您配置了一个。

    如果有,您将看到一个包含您的连接字符串的DATABASE_URL 环境变量。只需从中设置您的 SQLAlchemy 数据库 URI:

    SQLALCHEMY_DATABASE_URI= os.environ.get('DATABASE_URL')
    

    如果数据库没有为您配置(通过运行heroku addons 进行检查)您可以使用免费层轻松provision one

    heroku addons:create heroku-postgresql:hobby-dev
    

    请注意,您根本不应该在 Heroku 上运行 manage.py db migrate。这生成迁移文件,这些文件将在Heroku's ephemeral filesystem 上丢失。 本地生成迁移,并提交迁移文件。不过,您需要在这两个地方都运行 manage.py db upgrade

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2015-01-05
      • 2013-02-01
      • 2015-06-10
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多