Ich versuche, meine Heroku-App mit einer Google Cloud mySQL-Instanz zu verbinden, und ich verwende das Fixie Socks-Addon, um eine statische IP auf die Whitelist zu bekommen. Wenn ich die App von meinem cloud9-Arbeitsplatz aus teste, funktioniert alles einwandfrei. Ich kann Anfragen an die Datenbank stellen und alles geht durch den Fixiesocken-Proxy. Aber wenn ich nach Heroku schiebe und dort teste, bekomme ich immer Fehler. Wenn ich auf eine Seite komme, die eine mySQL-Abfrage erstellt, bekomme ich den Fehlercode 'EPIPE' und auf der mySQL-Instanz protokolliert sie den Fehler 'Fehler beim Lesen der Kommunikationspakete'.Datenbankfehler- Heroku Node/Express-App
Dies ist mein Code ähnlich, die Verbindung herzustellen:
'use strict';
const SocksConnection = require('socksjs');
const mysql = require('mysql2');
const fixieUrl = process.env.FIXIE_SOCKS_HOST;
const fixieValues = fixieUrl.split(new RegExp('[/(:\\/@)/]+'));
const mysqlServer = {
host: [host],
port: 3306
};
const dbUser = 'user';
const dbPassword = 'password';
const db = 'database';
const fixieConnection = new SocksConnection(mysqlServer, {
user: fixieValues[0],
pass: fixieValues[1],
host: fixieValues[2],
port: fixieValues[3],
});
const mysqlConnPool = mysql.createPool({
user: dbUser,
password=(redacted)),
database: db,
stream: fixieConnection
});
Hier ist ein Beispiel für eine Abfrage in meinem Code:
function getCrewBases(res, mysql, context, complete, func){
mysql.pool.query("SELECT id, city FROM crew_base", function(error, results, fields){
if(error){
res.write(JSON.stringify(error));
res.end();
}
context.crewbase = results;
func(context);
complete();
});
}
function getCrewMembers(res, mysql, context, complete, func){
mysql.pool.query("SELECT crew_member.id, fname, lname, crew_base.city AS crewbase, role FROM crew_member LEFT JOIN crew_base ON crew_member.crewbase = crew_base.id", function(error, results, fields){
if(error){
res.write(JSON.stringify(error));
res.end();
}
context.crew_member = results;
func(context);
complete();
});
}
router.get('/', function(req, res){
var callbackCount = 0;
var context = {};
context.jsscripts = ["scripts/db/deletecrew.js"];
var mysql = req.app.get('mysql');
getCrewMembers(res, mysql, context, complete, function(context){
getCrewBases(res, mysql, context, complete, function(){});
});
context.layout = 'db-project';
function complete(){
callbackCount++;
if(callbackCount >= 2){
res.render('db-project/crew', context);
}
}
});
Ich habe versucht, eine Lösung für die Stunden zu finden Aber die Fehler sind zu vage, um eine gute Dokumentation für eine Fehlerbehebung zu finden.
Ich möchte nur meine Heroku-App mit einer mySQL-Datenbank verbinden. Wenn jemand einen einfacheren Weg hat (das ist noch frei), bin ich bereit, es zu versuchen.