2017-12-18 1 views
0

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.

Antwort

0

Problem gelöst. Ich habe die google cloud db und fixie socks losgeworden und stattdessen das cloudDB-Addon benutzt.