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

时间:2016-02-09 07:08:26

标签: postgresql heroku mantis

我正在尝试使用PostgreSQL作为数据库在Heroku上部署Mantis BT,作为概念和学习练习的证明(或者更准确地说,作为“爬上陡峭的学习曲线”,因为我是一个这三种技术的新手总数。)

将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命令的输出,这似乎表明我对我创建的表有 no 特权:

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

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

根据经验,我已经能够确定我具有CREATE(对于表和索引),SELECT,INSERT,UPDATE,DELETE,ALTER和DROP的特权,它们似乎是what Mantis BT requires的“高权限数据库帐户。“

所以,似乎我拥有填写Mantis BT admin/install.php形式所需的一切:

  • 主机名:ec2-107-21-219-201.compute-1.amazonaws.com
  • 用户名:useruseruser
  • 密码:passwordpasswordpassword
  • 数据库:dbnamedbname
  • 管理员用户名:useruseruser
  • 管理员密码:passwordpasswordpassword

这里有两点说明:

  1. 是的,我知道常规数据库用户不应该拥有Admin用户拥有的所有权限,但是Heroku只给了我一个DB用户名,并且(因为这只是一个概念验证)我不想要开始尝试可能的盲目小巷 - 并且失败 - 立即创建第二个用户。
  2. Mantis BT表单显示管理员用户名和密码是“根据需要创建数据库”。由于数据库(“dbnamedbname”)已经存在,我最初认为我可以将这些留空,但Mantis BT坚持为它们设置值(并且install documentation表示如果它们没有提供,“数据库用户将使用“)。
  3. 然而,当我使用上面的值填写表单并单击“安装/升级数据库”按钮时,我收到一个失败,指示应用程序无法使用提供的凭据连接到数据库(确切相同的凭据,BTW,我曾经使用psql连接到数据库):

    enter image description here

    (上面的截图中有一个可疑的东西 - 我还没有在代码中自己去寻找:表单提交返回的页面中隐藏的管理员密码只显示六个子弹,而我粘贴的实际密码长度为30个字符。)

    所以,向任何了解Mantis BT数据库设置如何工作的人提出问题。

    1. 它实际上只将六个字符的密码传递给数据库服务器,还是只是一个UI故障?
    2. 即使我弄清楚为什么它没有连接到数据库 - 如果确实如此 - 是“创建数据库如果需要”(在管理员用户名和密码条目上)的表示法重大?或者,即使指定的数据库已存在,愚蠢的事情也会尝试创建数据库吗?
    3. 如果上面2的回答是“是的,它会尝试创建数据库”,考虑到Heroku如何配置PostgreSQL数据库,建议的解决方法是什么?

1 个答案:

答案 0 :(得分:2)

“数据库连接失败”是由初始连接尝试产生的,其中未指定数据库名称。

尝试从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()调用会导致连接尝试成功,此后所有表创建步骤和检查都会成功。

我不清楚问题是PostgreSQL 9.4.5本身,还是Heroku特别配置PostgreSQL服务器的问题。

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

因此,修补代码后,我问的问题的答案是:

  1. 它传递输入的所有参数,没有截断。
  2. 如果数据库已存在, 不会尝试创建数据库。
  3. N / A:Mantis做对了。
  4. 作为奖励答案,在Heroku配置的PostgreSQL数据库中显然是not possible to create a lower-privileged user - 你会被他们给你的一个用户所困扰。哪种方式很糟糕。