让 Heroku 应用程序的 DATABASE_URL 指向 Media Temple GS 数据库

发布于 2024-10-10 14:14:25 字数 381 浏览 9 评论 0原文

我不确定在哪里发布此内容,所以我认为这可能是一个好地方。我想知道是否可以让 Heroku 应用程序的 DATABASE_URL 指向 Media Temple GS 数据库?我已经尝试使用以下命令设置到我的 mt 数据库的外部域的连接(同时允许 heroku 的 IP 地址位于 mt 可接受的外部 IP 地址中):“heroku config:add DATABASE_URL=mysql://username:password@host/databasename - -app appname”并运行“heroku rake db:migrate --app appname”,但它似乎不起作用。有什么想法吗?错误如下所示:

rake 已中止!
无法连接到“example.com”上的 MySQL 服务器 (111)

I wasn't sure where to post this so I thought this might be a good place. I would like to know if it's possible to have a Heroku app's DATABASE_URL point to a Media Temple GS database? I have already tried setting up a connection to my mt database's external domain (while allowing heroku's ip addresses in mt's acceptable external ip addresses) using the command: "heroku config:add DATABASE_URL=mysql://username:password@host/databasename --app appname" and running "heroku rake db:migrate --app appname", but it doesn't seem to work. Any ideas? Here is what the error looks like:

rake aborted!
Can't connect to MySQL server on 'example.com' (111)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

纸短情长 2024-10-17 14:14:25

不支持从 Heroku 外部的计算机连接到共享的 Heroku 数据库。但可以使用其 pg:ingress 功能连接到专用的 heroku 数据库。

这本质上是 Heroku 堆栈中的安全和资源功能。如果您需要连接到外部数据层,您需要为其构建一个 API 并通过它进行工作。

编辑:
https://github.com/nbudin/heroku_external_db 正在开发一个漂亮的 gem

Connecting to a shared heroku database from machines outside of Heroku is not supported. but it is possible to connect to a dedicated heroku database using their pg:ingress feature.

This is essentially a security and resourcing feature in the heroku stack. If you need to connect to external data tiers you'd need to build an API for it and work via that.

Edit:
Theres a nifty looking gem being worked on at https://github.com/nbudin/heroku_external_db

属性 2024-10-17 14:14:25

不支持从 Heroku 外部的计算机连接到共享的 Heroku 数据库。但可以使用其 pg:ingress 功能连接到专用的 heroku 数据库。

这本质上是 Heroku 堆栈中的安全和资源功能。如果您需要连接到外部数据层,您需要为其构建一个 API 并通过它进行工作。

Connecting to a shared heroku database from machines outside of Heroku is not supported. but it is possible to connect to a dedicated heroku database using their pg:ingress feature.

This is essentially a security and resourcing feature in the heroku stack. If you need to connect to external data tiers you'd need to build an API for it and work via that.

归属感 2024-10-17 14:14:25

问题不在于 Heroku,我过去已经能够通过我的托管提供商成功连接到外部数据库。您需要使用此表示法:

    $pdoconn = new PDO('mysql:host=' . $host . ';dbname=' . $db, $user, $pwd, array( PDO::ATTR_PERSISTENT => false));

另一方面,媒体寺庙有一个策略,只允许特定的 IP 地址从外部位置连接到在网格服务器中运行的 mysql 实例。

您可以按照以下步骤更改该列表:

您的域名 >管理员>管理数据库>用户&设置>外部数据库>添加 IP

这里的问题主要依赖于确定暴露给 MediaTemple 的 Heroku 服务器的 IP 地址,因为地址会随着时间的推移而改变。

要确定您暴露的 IP,您可以创建一个新文件 ipcheck.php,其内容如下:

<?php
$homepage = file_get_contents('http://www.whatsmyip.org/');
echo $homepage;
?>

然后在部署到 Heroku 实例后浏览此页面,您将看到您的 IP 对于每个请求都有很大不同。

解决此问题的唯一方法是通过 Proximo 插件 或类似插件配置静态 IP,然后配置 MediaTemple 以允许来自该 IP 的外部连接。

为您的 mysql 数据库运行 hostgator 服务器可能更便宜(hostgator mysql 数据库允许从任何地方进行外部连接)。

The problem does not lie with Heroku, I've been able to successfully connect to external databases with my hosting provider in the past. You need to use this notation:

    $pdoconn = new PDO('mysql:host=' . $host . ';dbname=' . $db, $user, $pwd, array( PDO::ATTR_PERSISTENT => false));

Media temple on the other hand have a policy of only allowing specific IP addresses to connect to the mysql instance runninng in your Grid Server from an external location.

You can alter that list by following these steps:

Your Domain > Admin > Manage Databases > Users & Settings > External Databases > Add IP

The problem here relies mainly on determining your Heroku server's IP address exposed to MediaTemple, as address will change over time.

To determine your exposed IP you can create a new file ipcheck.php with contents as follows:

<?php
$homepage = file_get_contents('http://www.whatsmyip.org/');
echo $homepage;
?>

Then browse this page after deploying to your heroku instance, you will see that your IP is pretty much different with every request.

The only way around this is by provisioning a static IP through the Proximo addon or similar, then configuring MediaTemple to allow external connections from that IP.

Its probably cheaper to run a hostgator server for your mysql database (hostgator mysql database allows external connections from anywhere).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文