猿问

Docker、Flask、SQLAlchemy:ValueError:int() 的无效文字

我有一个可以成功初始化并连接到 Postgresql 数据库的烧瓶应用程序。但是,当我尝试 dockerize 这个应用程序时,我收到以下错误消息。“SQLALCHEMY_DATABASE_URI”是正确的,我可以连接到它,所以我不知道我哪里出错了。


docker-compose 日志


app_1       |   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/url.py", line 60, in __init__

app_1       |     self.port = int(port)

app_1       | ValueError: invalid literal for int() with base 10: 'None'

Postgres 数据库在 Docker 容器中成功连接


postgres_1  | LOG:  database system is ready to accept connections

配置文件


from os import environ

import os


RDS_USERNAME = environ.get('RDS_USERNAME')

RDS_PASSWORD = environ.get('RDS_PASSWORD')

RDS_HOSTNAME = environ.get('RDS_HOSTNAME')

RDS_PORT = environ.get('RDS_PORT')

RDS_DB_NAME = environ.get('RDS_DB_NAME')


SQLALCHEMY_DATABASE_URI = "postgresql+psycopg2://{username}:{password}@{hostname}:{port}/{dbname}"\

                          .format(username = RDS_USERNAME, password = RDS_PASSWORD, \

                           hostname = RDS_HOSTNAME, port = RDS_PORT, dbname = RDS_DB_NAME)

flask_app.py(入口点)


def create_app():

    app = Flask(__name__, static_folder="./static", template_folder="./static")

    app.config.from_pyfile('./app/config.py', silent=True)


    register_blueprint(app)

    register_extension(app)


    with app.app_context():

        print(db) -> This prints the correct path for SQLALCHEMY_DATABASE_URI

        db.create_all()

        db.session.commit()

    return app


def register_blueprint(app):

    app.register_blueprint(view_blueprint)

    app.register_blueprint(race_blueprint)



def register_extension(app):

    db.init_app(app)

    migrate.init_app(app)



app = create_app()


if __name__ == '__main__':

    app.run(host='0.0.0.0', port=8080, debug=True)


人到中年有点甜
浏览 347回答 2
2回答

隔江千里

你需要设置环境变量RDS_USERNAME,RDS_PASSWORD,RDS_HOSTNAME,RDS_PORT和RDS_DB_NAME在Dockerfile用ENV key value,例如ENV RDS_PORT 5432
随时随地看视频慕课网APP

相关分类

Python
我要回答