【问题标题】:Deploying Mantis BT on Heroku: Postgresql setup?在 Heroku 上部署 Mantis BT:Postgresql 设置?
【发布时间】:2016-02-09 07:08:26
【问题描述】:

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

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. 是的,我知道普通 DB 用户不应该拥有 Admin 用户拥有的所有权限,但是 Heroku 只给了我一个 DB 用户名,而且(因为现在这只是一个概念证明)我不想要开始尝试创建第二个用户可能失败的死胡同。
  2. Mantis BT 表单显示管理员用户名和密码是“在需要时创建数据库”。由于数据库(“dbnamedbname”)已经存在,我最初认为我可以将这些留空,但 M​​antis BT 坚持为它们提供值(install documentation 表示如果不提供它们,“将使用数据库用户")。

然而,当我使用上面的值填写表格并单击“安装/升级数据库”按钮时,我得到一个失败,表明应用程序无法使用提供的凭据连接到数据库(确切的相同的凭据,顺便说一句,我使用psql 连接到数据库):

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

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

  1. 实际上是只向数据库服务器传递了六个字符的密码,还是只是一个 UI 故障?
  2. 即使在我弄清楚为什么它没有连接到数据库之后——如果那是真的——“创建数据库 if required”(在管理员用户名和密码条目上)确​​实是重大?或者即使指定的数据库已经存在,愚蠢的事情也会去尝试创建数据库?
  3. 如果上面 2 的答案是“是的,无论如何它都会尝试创建数据库”,考虑到 Heroku 如何配置 PostgreSQL 数据库,推荐的解决方法是什么?

【问题讨论】:

    标签: postgresql heroku mantis


    【解决方案1】:

    “数据库连接失败”是由未指定数据库名称的初始连接尝试引起的。

    尝试以这种方式从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 做了正确的事。

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

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2016-11-25
      • 2018-12-28
      • 2017-06-24
      相关资源
      最近更新 更多