我们正在 GAE 上设置一个节点应用程序,而我们使用的其中一个库不能很好地与 unix 套接字配合使用。
GAE 中的云代理设置使用 unix 套接字,我用谷歌搜索并搜索了谷歌文档,但找不到有关配置在 GAE(即生产中)中创建的云代理以使用 TCP 套接字的信息。
(我在测试时已在本地完成,但无法弄清楚我需要在 app.yaml 中设置什么才能使其在生产中发生)
我们正在 GAE 上设置一个节点应用程序,而我们使用的其中一个库不能很好地与 unix 套接字配合使用。
GAE 中的云代理设置使用 unix 套接字,我用谷歌搜索并搜索了谷歌文档,但找不到有关配置在 GAE(即生产中)中创建的云代理以使用 TCP 套接字的信息。
(我在测试时已在本地完成,但无法弄清楚我需要在 app.yaml 中设置什么才能使其在生产中发生)
为了能够在您的应用程序中使用 TCP 套接字,您必须迁移到自定义运行时。
您可以使用以下命令生成 Dockerfile
$ gcloud beta app gen-config --custom
在为此运行时生成 Dockerfile 后,将其修改如下:
FROM gcr.io/google_appengine/nodejs
RUN /usr/local/bin/install_node '>=4.3.2'
RUN apt-get update
RUN apt-get install mysql-client -yy
RUN apt-get install wget -yy
COPY . /app/
RUN npm install --unsafe-perm || \
((if [ -f npm-debug.log ]; then \
cat npm-debug.log; \
fi) && false)
RUN wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
RUN chmod +x cloud_sql_proxy
RUN echo -e “#!/bin/bash\n./cloud_sql_proxy -instances=YOUR-INSTANCE-DB=tcp:3306 &\nnode server.js” > script.sh
RUN chmod +x script.sh
CMD bash script.sh
这在部署时将生成容器,并且该容器将使代理通过 TCP 进行通信。
在部署之前,app.yaml
您必须在文件中从 中删除env_variables
INSTANCE_CONNECTION_NAME
,因为您已经在 Dockerfile 中指出了这一点。
不要忘记启用 Cloud SQL API来运行它。
我在这里使用了示例,您可以看到其中的函数connect
具有server.js
这样的 if 条件:
if (process.env.INSTANCE_CONNECTION_NAME && process.env.NODE_ENV === 'production') {
config.socketPath =/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}
}
如果您有类似的内容,请在环境变量 INSTANCE_CONNECTION_NAME 中删除它,因为您现在没有提供。
这是解决这种情况的一种方法,但如果不是这样,我认为不可能。