2014-09-03 85 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