Python Bookshelf App使用Postgresql Cloud SQL DB部署到GCP时出错

我正在使用postgresSQL云SQL DB部署GCP Python书架应用程序。 我的应用无法正常运行。错误日志如下图所示。

Python Bookshelf App使用Postgresql Cloud SQL DB部署到GCP时出错

我已经对app.yaml,requirements.txt和config.py文件进行了所有必需的更改。 该项目使用cloud-sql-proxy在本地运行良好,但在已部署的版本中无法正常运行。有人可以指导我如何解决这个问题吗?

我在 app.yaml 中的 env变量是:

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

#[START cloudsql_settings]
beta_settings:
    cloud_sql_instances: "<my_project_id>:<region_name>:<cloudsql_instance>"
    # cloud_sql_instances: "your-cloudsql-connection-name"
#[END cloudsql_settings]

config.py 是:

import os

DATA_BACKEND = 'cloudsql'
PROJECT_ID = '<my_project_id>'
CLOUDSQL_USER = '<username>'
CLOUDSQL_PASSWORD = '<password>'
CLOUDSQL_DATABASE = '<db_name>'
CLOUDSQL_CONNECTION_NAME = '<my_project_id>:<region_name>:<cloudsql_instance>'
LOCAL_SQLALCHEMY_DATABASE_URI = (
    'postgresql+psycopg2://{user}:{password}@127.0.0.1:3306/{database}').format(
        user=CLOUDSQL_USER,password=CLOUDSQL_PASSWORD,database=CLOUDSQL_DATABASE)
LIVE_SQLALCHEMY_DATABASE_URI = (
    'postgres://{user}:{password}@localhost/{database}'
    '?unix_socket=/cloudsql/{connection_name}').format(
        user=CLOUDSQL_USER,database=CLOUDSQL_DATABASE,connection_name=CLOUDSQL_CONNECTION_NAME)

if os.environ.get('GAE_INSTANCE'):
    SQLALCHEMY_DATABASE_URI = LIVE_SQLALCHEMY_DATABASE_URI
else:
    SQLALCHEMY_DATABASE_URI = LOCAL_SQLALCHEMY_DATABASE_URI

requirements.txt 是:

flask>=1.0.0
google-cloud-datastore==1.7.1
gunicorn==19.9.0
flask-SQLAlchemy==2.3.2
psycopg2==2.8.4
PyMySQL==0.9.2
flask-PyMongo>=2.0.0
oauth2client==4.1.2
PyMongo==3.7.2
six==1.11.0

详细错误是:

Traceback (most recent call last):
  File "/env/lib/python3.6/site-packages/sqlalchemy/engine/base.py",line 2275,in _wrap_pool_connect
    return fn()
  File "/env/lib/python3.6/site-packages/sqlalchemy/pool/base.py",line 363,in connect
    return _ConnectionFairy._checkout(self)
  File "/env/lib/python3.6/site-packages/sqlalchemy/pool/base.py",line 760,in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/env/lib/python3.6/site-packages/sqlalchemy/pool/base.py",line 492,in checkout
    rec = pool._do_get()
  File "/env/lib/python3.6/site-packages/sqlalchemy/pool/impl.py",line 139,in _do_get
    self._dec_overflow()
  File "/env/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py",line 68,in __exit__
    compat.reraise(exc_type,exc_value,exc_tb)
  File "/env/lib/python3.6/site-packages/sqlalchemy/util/compat.py",line 153,in reraise
    raise value
  File "/env/lib/python3.6/site-packages/sqlalchemy/pool/impl.py",line 136,in _do_get
    return self._create_connection()
  File "/env/lib/python3.6/site-packages/sqlalchemy/pool/base.py",line 308,in _create_connection
    return _ConnectionRecord(self)
  File "/env/lib/python3.6/site-packages/sqlalchemy/pool/base.py",line 437,in __init__
    self.__connect(first_connect_check=True)
  File "/env/lib/python3.6/site-packages/sqlalchemy/pool/base.py",line 639,in __connect
    connection = pool._invoke_creator(self)
  File "/env/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py",line 114,in connect
    return dialect.connect(*cargs,**cparams)
  File "/env/lib/python3.6/site-packages/sqlalchemy/engine/default.py",line 481,in connect
    return self.dbapi.connect(*cargs,**cparams)
  File "/env/lib/python3.6/site-packages/psycopg2/__init__.py",line 125,in connect
    dsn = _ext.make_dsn(dsn,**kwargs)
  File "/env/lib/python3.6/site-packages/psycopg2/extensions.py",line 174,in make_dsn
    parse_dsn(dsn)
psycopg2.ProgrammingError: invalid dsn: invalid connection option "unix_socket"
heyun2215355 回答:Python Bookshelf App使用Postgresql Cloud SQL DB部署到GCP时出错

您使用postgresql+psycopg2://username:password@/db?unix_socket=/cloudsql/project-name:region:dbinstance吗?

尝试使用postgres://代替postgresql+psycopg2//:

您向我们提供的有关您的联系或任何其他信息的信息越多,我们将尽力为您提供帮助。这是您自己立足的tutorial吗?

编辑:

嘿,如果您再次检查了每个连接是否正常,请向您的App Engine服务帐户添加Cloud SQL Client角色,并告诉我是否为您解决了该问题。

,

LIVE_SQLALCHEMY_DATABASE_URI =('postgres:// {user}:{password} @ localhost / {database}''?host = / cloudsql / {connection_name}')。

我必须在LIVE_SQLALCHEMY_DATABASE_URI中将unix_socket替换为主机。也只需要postgres。

我不知道是否需要,但我还向我的App Engine服务帐户添加了Cloud SQL Client角色。 谢谢大家的帮助。

,

仅供参考,此语法对我适用于使用pg8000驱动程序在Cloud SQL中使用PostgreSQL实例的App Engine部署:

connection_string = sqlalchemy.engine.url.URL(
   drivername="postgres+pg8000",username=username,password=password,database=database,query="unix_sock": "/cloudsql/{}/.s.PGSQL.5432".format(instance),)

connection = sqlalchemy.create_engine(
    connection_string,pool_size=50,max_overflow=2,pool_timeout=30,pool_recycle=1800,)
本文链接:https://www.f2er.com/3152176.html

大家都在问