2014-09-03 97 views
0

我想託管基於node.js和MySql數據庫的應用程序。我嘗試heroku託管。我創建了一個應用程序,並添加了Punch DB計劃的ClearDB附加組件。此附加組件的主要限制是我無法在此計劃中創建任何用戶定義的函數和事件。它爲昂貴的數據庫計劃提供支持。NodeJS + MySql託管

然後,我將我的數據庫託管在Google Cloud SQL上。它允許創建用戶定義的函數和事件。但是我無法從我的heroku應用程序訪問數據庫,因爲我不知道如何爲我的谷歌雲數據庫授權外部heroku網絡。我怎樣才能做到這一點?

或者可能有沒有上述限制的NodeJS + MySql應用程序的其他主機?

+0

你想創建什麼樣的事件/用戶定義的函數? – brennebeck 2014-09-03 09:18:23

+0

確定性函數和從某個表中刪除而不是實際數據的事件 – Dmitriy 2014-09-03 09:30:51

回答

1

您應該能夠:

一)使用雲SQL通過authorizing通過像QuotaGuard StaticProximo代理服務您的Heroku賽道的外部IP;
b)使用Amazon RDS執行相同操作。

的更多細節,可以幫助:
1. SO question相關QuotaGuard

澄清:你必須使用第三方插件喜歡這樣,因爲Heroku的也不能保證一個單一的IP,甚至是您的dyno的IP地址範圍。

0

我添加了QuotaGuard Static add-on,它包含兩個ip地址。我將這些地址添加到我的Google Cloud Sql的授權網絡中。之後我嘗試使用guide連接到tha數據庫。這裏是我的代碼:

exports.getConnection =() -> 
    dbConnParams = 
     host: 'google cloud sql ip' 
     port: 3306 

    proxy = url.parse process.env.QUOTAGUARDSTATIC_URL 
    auth = proxy.auth; 
    username = auth.split(":")[0] 
    pass = auth.split(":")[1] 

    sock_options = 
     host: proxy.hostname 
     port: proxy.port 
     user: username 
     pass: pass 

    sockConn = new SocksConnection dbConnParams, sock_options 
    dbConnection = mysql.createConnection({ 
     user: 'root', 
     password: 'pwd', 
     stream: sockConn 
    }); 

    return dbConnection 

但是,我得到一個錯誤:「連接ECONNREFUSED」。這種方法有什麼問題?

+0

可以肯定的是,您基本上[這是](https://developers.google.com/cloud-sql/docs/access-control#appaccess) QuataGuard IPs,對嗎?另外,你是否嘗試過通過本地機器上的'mysql'(或Workbench,或其他)連接到CloudSQL? – brennebeck 2014-09-04 10:58:08

+0

你有沒有試過用'1080'作爲'sock_options.port'? – brennebeck 2014-09-04 11:03:35

+0

@brennebeck是的,我做了一個你引用的步驟。我試圖通過工作臺連接 - 它連接成功。但我沒有嘗試過使用1080端口。我今天會嘗試。 – Dmitriy 2014-09-04 11:14:38