我正在尝试从云运行连接到云sql。然而,我得到了错误,不确定需要做什么。
码
def create_database_connection(db_user, db_pass, db_name, instance_connection_name):
db_socket_dir = os.environ.get("DB_SOCKET_DIR", "/cloudsql")
pool = sqlalchemy.create_engine(
sqlalchemy.engine.url.URL.create(
drivername="mysql+pymysql",
username=db_user, # e.g. "my-database-user"
password=db_pass, # e.g. "my-database-password"
database=db_name, # e.g. "my-database-name"
query={
"unix_socket": "{}/{}".format(
db_socket_dir, # e.g. "/cloudsql"
instance_connection_name) # i.e "<PROJECT-NAME>:<INSTANCE-REGION>:<INSTANCE-NAME>"
}
),
)
return pool
@app.route('/test', methods=['GET'])
def handle_test():
connection = database.create_database_connection(db_user=os.getenv("db_user"),
db_pass=os.getenv("db_pass"),
db_name=os.getenv("db_name"),
instance_connection_name=os.getenv("instance_connection_name"))
Session = sessionmaker(bind=connection)
session = Session()
records = session.query(Demo).all()
records_list = [record.__dict__ for record in records]
for record in records_list:
del record["_sa_instance_state"]
print(records_list)
json_string = json.dumps(records_list)
return json_string
误差
Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/pymysql/connections.py", line 602, in connect sock.connect(self.unix_socket) FileNotFoundError: [Errno 2] No such file or directory
in connect raise exc sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError)
(2003, "Can't connect to MySQL server on 'localhost' ([Errno 2] No such file or directory)")
我使用gcloud运行直接从源代码部署应用程序。因此,google云构建正在构建和部署图像。
我也尝试创建文件夹,但是在docker文件中仍然有相同的错误。
Dockerfile
FROM python:3.10-slim
ENV PYTHONUNBUFFERED True
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./
RUN mkdir -p /cloudsql
RUN pip install --no-cache-dir -r requirements.txt
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
更新:
/cloudsql
正在创建,DB_SOCKER_DIR
更改为/tmp
,仍然是相同的问题。通过cloud function
连接到相同代码的数据库没有问题。我只在使用cloud run
时出错
我使用以下命令对deploy cloud run
gcloud run deploy processcontrol --source . --set-cloudsql-instances=cloud-sql-8
我已经为我试图访问的SQL设置了连接。
发布于 2021-12-22 16:53:14
您是否在云运行实例中启用了Cloud代理?关于在这里设置这些信息的更多信息:
https://stackoverflow.com/questions/70441322
复制相似问题