在 Heroku 上部署 Mantis BT:Postgresql 设置?

Deploying Mantis BT on Heroku: Postgresql setup?

我正在尝试在 Heroku 上部署 Mantis BT,使用 PostgreSQL 作为数据库,作为概念证明和学习练习(或者更准确地说,作为 "climb up a steep learning curve,",因为我是一个新手所有三种技术)。

将 PHP 应用程序部署到 Heroku 很顺利,访问该应用程序的 URL 会显示其 admin/install.php 页面。配置 PostgreSQL 数据库很顺利,并给了我一个数据库 URL(混淆)看起来像这样:

postgres://useruseruser:passwordpasswordpassword@ec2-107-21-219-201.compute-1.amazonaws.com:5432/dbnamedbname

我可以使用这些凭据通过 psql 访问数据库,并且用户(可以预见)没有 'usecreatedb' 权限。我无法真正理解 PostgreSQL \z 命令的输出,这似乎表明我对我创建的 table 没有 no 权限:

dbnamedbname=> \z foo;
                          Access privileges
 Schema | Name | Type  | Access privileges | Column access privileges 
--------+------+-------+-------------------+--------------------------
 public | foo  | table |                   | 
(1 row)

但我把这种印象归结为还没有真正了解 PostgreSQL 的习语。

根据经验,我已经能够确定我拥有 CREATE(对于 tables 和索引)、SELECT、INSERT、UPDATE、DELETE、ALTER 和 DROP 的权限,这似乎what Mantis BT requires 因为 "high-privileged database account."

所以,看来我已经具备了填写 Mantis BT admin/install.php 表格所需的一切:

这里有两个注意事项:

  1. 是的,我知道普通数据库用户不应该拥有管理员用户拥有的所有权限,但是 Heroku 只给了我一个数据库用户名,并且(因为这只是一个概念证明)我没有'我不想走上可能的死胡同,尝试创建第二个用户,但失败了。
  2. Mantis BT 表单显示管理员用户名和密码是 "to create Database if required." 由于数据库 ("dbnamedbname") 已经存在,我最初认为我可以将这些留空,但 M​​antis BT 坚持让它们的值(install documentation 表示如果未提供它们,"the database user will be used")。

然而,当我使用上面的值填写表格并单击 "Install/Upgrade Database" 按钮时,我收到一个失败消息,表明该应用程序无法使用提供的凭据连接到数据库 (完全相同的凭据,顺便说一句,我曾经使用 psql):

连接到数据库

(上面屏幕截图中的一个可疑之处——我 还没有 鼓起勇气在代码中寻找:在返回的页面中模糊的管理员密码表单提交仅显示六个项目符号,而我粘贴的实际密码长度为 30 个字符。)

因此,请向了解 Mantis BT 数据库设置工作原理的任何人提问。

  1. 它实际上只向数据库服务器传递了六个字符的密码,还是只是一个 UI 故障?
  2. 即使在我弄清楚为什么它没有连接到数据库之后——如果这是真的——符号 "to create Database if required"(在管理员用户名和密码条目上)真的很重要吗?还是愚蠢的事情会去尝试创建数据库,即使指定的数据库已经存在?
  3. 如果以上 2 的答案是 "Yes, it will try to create the database anyway," 考虑到 Heroku 如何配置 PostgreSQL 数据库,推荐的解决方法是什么?

"Database connection failed" 是未指定数据库名称的初始连接尝试的结果。

尝试从 psql 以这种方式访问​​服务器会导致以下错误:

$ psql -h ec2-107-21-219-102.compute-1.amazonaws.com -U useruseruser
Password for user useruseruser: 
psql: FATAL: database "useruseruser" does not exist

将数据库名称作为附加参数添加到该 Connect() 调用会导致连接尝试成功,然后所有 table 创建步骤和检查都会成功。

我不清楚问题是出在 PostgreSQL 9.4.5 本身,还是出在 Heroku 特别是如何配置他们的 PostgreSQL 服务器上。

提交问题:https://www.mantisbt.org/bugs/view.php?id=20589

因此,随着代码的修补,我提出的问题的答案是:

  1. 它按输入的方式传递所有参数,没有截断。
  2. 如果数据库已经存在,它不会尝试创建数据库。
  3. N/A:螳螂做对了。

作为一个额外的答案,它显然是 not possible to create a lower-privileged user 在 Heroku 提供的 PostgreSQL 数据库中——你被他们给你的一个用户困住了。有点烂。