php - PHP 在 Heroku 上连接到 Postgres 时遇到问题
问题描述
当部署到 heroku 时,似乎有些东西不起作用,因为我的端点没有将我通过 Heroku CLI 连接输入的数据返回到 postgres。在本地,我正在尝试使用以下命令进行故障排除连接。这是一个指向 github 的链接,它反映了我如何为 heroku 设置它(https://github.com/AlexMercedCoder/SavvyBackendAPI/blob/master/api/models/comments.php),下面的 url 使用实际的主机名我本地环境中的字符串。
$dbconn = pg_connect("host=<hostnamefromheroku>
port=5432 dbname=d3qvmqtmq9s8b user=cticedgggntdqf password=5d17168b471db3b178e8ede79d5f92605d765375ea153444cd403c0a544f2146 sslmode=require");
当我在浏览器中从本地主机运行它时,我收到以下错误:
<br />
<b>Warning</b>: pg_connect(): Unable to connect to PostgreSQL server: could not translate host name "dbname=d3qvmqtmq9s8b" to address: Name or service not known in <b>/home/alexmerced/gasei/PHP/savvy/api/models/comments.php</b> on line <b>11</b><br />
<br />
<b>Warning</b>: pg_query(): No PostgreSQL link opened yet in <b>/home/alexmerced/gasei/PHP/savvy/api/models/comments.php</b> on line <b>41</b><br />
<br />
<b>Notice</b>: Undefined variable: result in <b>/home/alexmerced/gasei/PHP/savvy/api/models/comments.php</b> on line <b>43</b><br />
NULL
<br />
<b>Warning</b>: pg_fetch_object() expects parameter 1 to be resource, bool given in <b>/home/alexmerced/gasei/PHP/savvy/api/models/comments.php</b> on line <b>45</b><br />
[]
所以测试一下我在本地的 PHP Cli 中运行了相同的命令,并且能够成功地从数据库中提取数据。(使用相同的 pg_query pg_fetch_object 命令)
因此,任何关于如何翻越这堵墙的建议将不胜感激。我已经阅读了很多关于这个问题的博客和问题,大多数解决方案似乎都无法解决问题。
这是已部署版本的链接:https ://savvyhotspotsapi.herokuapp.com/api/comments
如果你去 root 或 /api 显示它正在工作,我放在那里的 hello world index.php 工作正常。
2019 年 12 月 14 日更新
- 在本地,我让应用程序为 API 提供服务,但是当我部署到 heroku 时,仍然显示一个空数组,即使完全相同的代码能够在我的本地 php env 上成功检索数据。
我当前的连接代码,在本地工作:
$DBURL = "host=$h dbname=$n user=$u port=5432 password=$p sslmode=require";
$dbconn = pg_connect($DBURL);
我已经尝试过使用或不使用 sslmode,我已经使用字符串中的直接详细信息进行了尝试,似乎没有任何东西可以改变空数组。
解决方案
概括
创建 Heroku Postgres 数据库时,会在环境变量 DATABASE_URL 下生成一个 DB uri
诀窍是我使用它而不是尝试手动传递各个部分。
$dbconn = pg_connect(getenv("DATABASE_URL"));
不是
$DBURL = "host=$h dbname=$n user=$u port=5432 password=$p sslmode=require";
$dbconn = pg_connect($DBURL);
推荐阅读
- angular - 如何在 Sonarque 中包含 Angular Material 样式?
- c# - 包含随机文件扩展名的 asp.net mvc 安全文件夹
- android - 如何使用 result.getText() 在“zXingScannerView”中设置 EditText 中的结果文本?
- angularjs - 路由导航角度 1.5 和 UI 路由 1 上的动态负载组件
- sql - 如何在 Postgres 中解锁行
- amazon-web-services - 禁用 S3 生命周期规则
- c++ - 人的轮廓选择
- jquery - jQuery 可选择不将类插入所有子项
- java - Java - 多台服务器的调度算法
- deep-learning - 在 PyTorch 中使用 transforms.FiveCrop()/TenCrop() 时遇到问题