当前位置: 首页 > 知识库问答 >
问题:

Flask应用AWS Postgres连接在本地工作,但不能在Heroku上工作

薛祯
2023-03-14

我的Flask应用程序AWS Postgres连接在本地工作,但在Heroku上不工作。该应用程序在Heroku上工作,但它不向AWS Postgres获取/发送数据。

Heroku日志指出了一个endpoint在双引号中的问题。我不确定如何解决这个问题,因为我使用的是使用Psycopg2的SQLAlchemy。我没有直接使用psycopg2。

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

更改AWS以接受所有入站IP。谷歌直到所有链接都是紫色。努力搜索“双人双引号”,得到一个很好的结果。

Heroku日志中的错误:主机名在双引号中,这可能是问题所在

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
'postgres://username:password@awsdbname.*******.us-east- 
2.rds.amazonaws.com/dbname'
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个答案

夹谷山
2023-03-14

解决方案:在Heroku中更改DB_URI配置变量。我删除了Heroku中环境变量周围的引号。这仍然很奇怪,因为一些帖子建议Heroku配置变量需要引号。我仍然不知道为什么它在当地起作用而在生产中不起作用。希望这能帮助其他人。

 类似资料:
  • 我已经很久没有使用Heroku了,所以我有点生疏了。我创建了一个运行Ratchet IOServer的小型PHP应用程序。它监听端口5000。如果我运行并使用连接,一切似乎都能正常工作。我尝试了几种让PHP进程运行并接受连接的方法。 我的Procfile如下所示; 正在运行 然后,当我将服务器部署到Heroku时,它就不工作了。当我尝试telnet到端口上的框时,我得到 我刚刚读了关于Heroku

  • 我使用devise gem with rails进行身份验证,我的应用程序在本地运行良好,但是在heroku上部署时无法访问device视图。 检查日志时出现以下错误: ←[app[web.1]:←[0mDevis处理e::SessionsController#新作为超文本标记语言 ←[app[web.1]:←[0mDevis处理e::SessionsController#新作为超文本标记语言 ←

  • 我正在使用Amazon Linux AMI在EC2 AWS上运行以下脚本 从今天起,由于EC2上没有任何更改或新安装,脚本在昨天之前一直工作时停止工作。 本地计算机上的相同脚本仍然有效。 相反,在EC2上会出现以下错误: (节点:12636)UnhandledPromiseRejectionWarning:错误:导航失败,因为浏览器已断开连接!在cdpsession.lifecyclewatche

  • 我有一段非常简单的Java代码,在那里我尝试从Java连接到我的Oracle DB。 在Windows下一切正常,但当我尝试在Ubuntu上运行时,我得到了一个错误。 我读了很多书,也试过很多解决方法。这是我的代码: 当我运行它时,我收到一个错误: 连接失败Java.sql.sqlRecoverable异常:IO错误:网络适配器无法在oracle.jdbc.driver.T4CConnection

  • Peer.JS server.js github链接到项目:链接 新来的赫罗库。任何帮助都将不胜感激!

  • IIS可能会搞砸它?我倾向于认为IIS对于和)有不同的进程,因此,我在app.post上引用的套接字与我在()中加入用户是不同的。 在Azure/IIS中使用socket.io房间时有什么提示吗?谢了!