运行 manage.py 在 Heroku for Flask 应用上给出 "could not connect"
Running manage.py on Heroku for Flask app gives "could not connect"
我正在尝试在我的 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
。
这个错误一直困扰着我,我找不到任何解决方案。
为什么这不起作用?
您无法将 Heroku 应用程序连接到本地数据库,但存在一些重大缺陷。设置起来非常痛苦(您需要处理端口转发和可能至少一个防火墙,可能是动态 IP 地址,...),如果您的笔记本电脑关闭,您的应用程序将不会 运行。
更好的解决方案是在云中拥有一个数据库,鉴于您已经在使用 Heroku 和 PostgreSQL,最自然的选择是 Heroku's own Postgres service。如果您依赖 psycopg2
,很可能已经为您配置了一个。
如果有,您将看到一个包含您的连接字符串的 DATABASE_URL
环境变量。只需从中设置您的 SQLAlchemy 数据库 URI:
SQLALCHEMY_DATABASE_URI= os.environ.get('DATABASE_URL')
如果数据库 尚未 为您配置(通过 运行ning heroku addons
) you can provision one 使用免费层轻松检查:
heroku addons:create heroku-postgresql:hobby-dev
请注意,您根本不应该 运行ning manage.py db migrate
在 Heroku 上。此 生成 迁移文件,这些文件将在 Heroku's ephemeral filesystem 丢失。在本地 生成迁移并提交迁移文件。不过,您需要在这两个地方 运行 manage.py db upgrade
。
我正在尝试在我的 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
。
这个错误一直困扰着我,我找不到任何解决方案。
为什么这不起作用?
您无法将 Heroku 应用程序连接到本地数据库,但存在一些重大缺陷。设置起来非常痛苦(您需要处理端口转发和可能至少一个防火墙,可能是动态 IP 地址,...),如果您的笔记本电脑关闭,您的应用程序将不会 运行。
更好的解决方案是在云中拥有一个数据库,鉴于您已经在使用 Heroku 和 PostgreSQL,最自然的选择是 Heroku's own Postgres service。如果您依赖 psycopg2
,很可能已经为您配置了一个。
如果有,您将看到一个包含您的连接字符串的 DATABASE_URL
环境变量。只需从中设置您的 SQLAlchemy 数据库 URI:
SQLALCHEMY_DATABASE_URI= os.environ.get('DATABASE_URL')
如果数据库 尚未 为您配置(通过 运行ning heroku addons
) you can provision one 使用免费层轻松检查:
heroku addons:create heroku-postgresql:hobby-dev
请注意,您根本不应该 运行ning manage.py db migrate
在 Heroku 上。此 生成 迁移文件,这些文件将在 Heroku's ephemeral filesystem 丢失。在本地 生成迁移并提交迁移文件。不过,您需要在这两个地方 运行 manage.py db upgrade
。