Я успешно развернул свое приложение в Google App Engine. Моя база данных настроена и работает на Cloud SQL. Я могу без проблем подключиться к базе данных с моего локального компьютера, занеся в белый список IP-адрес моей машины разработчика в авторизованных сетях в облачном SQL. Однако при развертывании в производственной среде я получаю:
Error: connect ENOENT /cloudsql/<my project id>:asia-south1:<my database instance name>
Мой файл app.yaml выглядит так:
runtime: nodejs
env: flex
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
env_variables:
ST_ENV: 'Production' //Used to set the app listening on the below port
ST_PORT: '8080'
SQL_USER: '<username>'
SQL_PASSWORD: '<password>'
SQL_DATABASE: '<databasename>'
INSTANCE_CONNECTION_NAME: '/cloudsql/<my project id>:asia-south1:<my database instance name>'
beta_settings:
cloud_sql_instances: '<my project id>:asia-south1:<my database instance name>'
Мой конфигурационный файл выглядит так:
database: {
connectionLimit: 10,
// host : process.env.INSTANCE_CONNECTION_NAME,
socketPath: process.env.INSTANCE_CONNECTION_NAME,
user : process.env.SQL_USER,
password : process.env.SQL_PASSWORD,
database : process.env.SQL_DATABASE,
multipleStatements : true
}
И я создаю пул соединений (я упростил код для этого примера):
var db = config.production.database;
var pool = mysql.createPool(db);
Мне удалось успешно подключиться с моего локального компьютера через локальный cloud_sql_proxy.
Я пробовал использовать IP-адрес экземпляра Cloud SQL в качестве хоста, но это дало мне следующую ошибку:
Error: connect ECONNREFUSED 127.0.0.1:3306'
Я также попытался указать хост как 0.0.0.0 и порт 3306 и получил:
Error: connect ECONNREFUSED 0.0.0.0:3306'
Обновлено: включены как Cloud SQL, так и API администратора Cloud SQL:
Это похоже на то, как при запуске в производство движок приложения пытается использовать несуществующий прокси. Кто-нибудь может помочь?
Ага. Я редактирую свой вопрос, чтобы включить скриншоты.
В ваших env_variables попробуйте удалить '/ cloudsql /' перед переменной INSTANCE_CONNECTION_NAME
Я установил (возможно, это было глупо) прокси на свой экземпляр движка приложения, и теперь все ошибки проходят через журналы моего движка приложения. Я удалил / cloudsql / и получил и без него: textPayload: "Ошибка: подключите ECONNREFUSED 127.0.0.1:3306 в TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1113: 14)
В этом нет необходимости. Я рекомендую попробовать запустить пример server.js, представленный в образцы, а затем внести дополнительные корректировки.
Я создал новую службу движка приложений и теперь получаю ЕЩЁНЫЙ ответ при поиске папки / cloudsql /. Что, как я предполагаю, означает, что этой папки не существует. Опять же, указывая на то, что прокси не работает на виртуальной машине движка приложения, как я могу это проверить?





Взгляните на конкретные инструкции для подключение из среды выполнения Node.js в App Engine Flexible. Вы можете настроить соединение, используя имя соединения экземпляра и некоторые другие переменные среды. Нет необходимости указывать имя хоста или устанавливать прокси-сервер SQL на вашем экземпляре. Попытка подключиться к общедоступному IP-адресу экземпляра Cloud SQL не будет работать из App Engine.
Так что возникла пара проблем. 1: Происходит действительно агрессивное кэширование, поэтому я получал кешированную ошибку при открытии моей страницы даже после повторного развертывания моего приложения, что меня отбросило (можно решить, перейдя в режим инкогнито). 2: Я также использовал свою базу данных для сохранения состояния сеанса, и диспетчер сеанса имел отдельное соединение с базой данных, которая использовала учетные данные для разработки. На самом деле у меня было правильно настроено основное соединение, и оно подключается нормально. Так что я награжу 50 репутацией, так как все равно проиграю ..
Включили ли вы Cloud SQL API в консоли?