2017-12-18 14 views
0

私はherokuアプリをGoogleクラウドmySQLインスタンスに接続しようとしていますが、私はfixie socksアドオンを使用してホワイトリストに静的IPを取得しています。私が私のクラウドワークスペースからアプリケーションをテストすると、すべて正常に動作します。私はデータベースとそのすべてがfixie socksプロキシを経由してクエリを実行できます。しかし、私が英雄に押してそこでテストするとき、私は間違いを続けます。私がmySQLのクエリを作成するページに移動すると、エラーコード 'EPIPE'が表示され、mySQLインスタンスで「通信パケットを読み取る際にエラーが発生しました」というエラーがログに記録されます。Databseエラー - Herokuノード/エクスプレスアプリ

これは、接続を行うために私のコードのようになります。

'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 
}); 

は、ここに私のコードでは、クエリの例です:

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); 
      } 
     } 
    }); 

私は時間のための解決策を見つけるためにしようとしてきましたエラーはあまりにも漠然としていて、修正のための良い文書を見つけることはできません。

私が探しているのは、HerokuアプリケーションをmySQLデータベースに接続することです。誰かが簡単な方法でそれを行うなら(それはまだ無料です)、私はそれを試してみます。

答えて

0

問題を解決しました。私はグーグルクラウドデータベースとfixieソックスを取り除き、代わりにclearDBアドオンを使用することになりました。