Flask App AWS Postgres Connection在本地运行,但不能在Heroku上运行

时间:2019-01-25 16:59:26

标签: postgresql amazon-web-services heroku flask sqlalchemy

MY Flask App AWS Postgres连接在本地有效,但不适用于Heroku。该应用程序可在Heroku上运行,但不会获取/发送数据到AWS Postgres。

Heroku日志指出端点使用双双引号引起的问题。我不确定如何解决此问题,因为我正在使用使用psycopg2的SQLAlchemy。我不是直接使用psycopg2。

我的AWS安全组设置为所有入站IP。

已更改AWS以接受所有入站IP。用谷歌搜索,直到所有链接变为紫色。很难搜索“双双引号”并获得良好的结果。

Heroku Logs中的错误:主机名用双双引号引起来

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not 
translate host name ""xxxx.xxxx.us-east- 
2.rds.amazonaws.com"" to address: Name or service not known

我的DB_URI环境变量:

'postgres://username:password@awsdbname.*******.us-east- 
2.rds.amazonaws.com/dbname'

AWS安全性

PostgreSQL TCP 5432 0.0.0.0/0 Anywhere-Delete
PostgreSQL TCP 5432 ::/0      Anywhere-Delete
I will change this when in production.

编辑:连接代码:

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(Config)

    db.init_app(app)

class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY')
    # SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI')
    SQLALCHEMY_DATABASE_URI = f"postgres://{os.environ.get('AWS_DB_USER')}:{os.environ.get('AWS_DB_PASS')}@{os.environ.get('AWS_DB_ENDPOINT')}/mydb"

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

在本地运行完全相同的代码。我的数据库是可读/可写的。在Heroku上运行时,我的应用程序已加载但未对Postgres进行读写。这表明存在权限问题,但我已允许AWS上的所有入站流量。任何帮助,将不胜感激。不知道为什么psycopg2可以在本地正确解析,但不能在Heroku上解析。

1 个答案:

答案 0 :(得分:0)

解决方案:在Heroku中更改DB_URI配置变量。我在Heroku中删除了环境变量周围的引号。这仍然很奇怪,因为有些帖子建议对Heroku Config变量使用引号。我仍然不知道为什么它在本地可用,但在生产中却无法使用。希望这对其他人有帮助。