python - 在 Heroku for Flask 应用程序上运行 manage.py 给出“无法连接”
问题描述
我正在尝试使用heroku run python manage.py db migrate
我的 Flask 应用程序在 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
。这个错误一直困扰着我,我无法在任何地方找到解决方案。
为什么这不起作用?
解决方案
如果没有一些主要缺点,您无法将 Heroku 应用程序连接到本地数据库。设置起来非常痛苦(您需要处理端口转发,可能至少需要一个防火墙,可能还有动态 IP 地址,...),如果您的笔记本电脑关闭,您的应用程序将无法运行。
更好的解决方案是在云中拥有一个数据库,并且鉴于您已经在使用 Heroku 和 PostgreSQL,最自然的选择是Heroku 自己的 Postgres 服务。如果您依赖psycopg2
,则很有可能已经为您配置了一个。
如果有,您将看到一个DATABASE_URL
包含连接字符串的环境变量。只需从中设置您的 SQLAlchemy 数据库 URI:
SQLALCHEMY_DATABASE_URI= os.environ.get('DATABASE_URL')
如果尚未为您配置数据库(通过运行检查heroku addons
),您可以使用免费层轻松配置一个:
heroku addons:create heroku-postgresql:hobby-dev
请注意,您根本不应该manage.py db migrate
在 Heroku 上运行。这会生成迁移文件,这些文件将在Heroku 的临时文件系统上丢失。在本地生成迁移,并提交迁移文件。不过,你会想manage.py db upgrade
在这两个地方跑步。
推荐阅读
- javascript - 附加
- 到底部
- 到底部
- c# - 如何将接口的具体实现传递给接受泛型接口的 MVC 部分视图?
- domain-driven-design - 是否可以在没有依赖注入 (DDD) 的聚合(域层)中实现 MediatR?
- google-cloud-platform - 使用 Google Dataflow 将 Google BigTable 同步到 BigQuery
- swift - 减少 Swift 中的“if 语句”(也许使用三元运算符)
- scala - 在 Scala 中将多个函数定义为同一类型的惯用方法是什么?
- python - 使用 heroku 部署 django 应用程序:“远程:!没有这样的应用程序”
- javascript - 反应:覆盖父div元素的onClick-Event
- firebase - 如何将图像添加到 Firestore
- c# - 这条 C# 行读什么?