我正在尝试使用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
设置为postgres://YourUserName:YourPassword@YourHost:5432/YourDatabase
格式的PostgreSQL数据库。
这个错误困扰着我,我无法在任何地方找到解决方案。
这为什么不起作用?
答案 0 :(得分: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上丢失。 local 本地生成迁移,并提交迁移文件。不过,您将希望在两个地方都运行manage.py db upgrade
。