代码之家  ›  专栏  ›  技术社区  ›  Hephaestus

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

  •  1
  • Hephaestus  · 技术社区  · 10 年前

    我试图在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 命令,这似乎说明我有 不 我创建的表的权限:

    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 它的“高特权数据库帐户”

    所以,我似乎有了填写螳螂BT所需的一切 管理员/安装.php 形式:

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

    这里有两个注意事项:

    1. 是的,我知道普通的DB用户不应该拥有Admin用户所拥有的所有权限,但Heroku只给了我一个DB用户名,(因为这只是一个概念的证明)我不想在创建第二个用户时走上一条可能的死胡同。
    2. Mantis BT表单显示,管理员用户名和密码是“在需要时创建数据库”。由于数据库(“dbnamedbname”)已经存在,我最初认为可以将其保留为空,但Mantis BT坚持为其保留值(以及 install documentation 表示如果不提供,“将使用数据库用户”)。

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

    enter image description here

    (上述截图中有一件可疑的事情——我 没有 但我还是鼓起勇气去寻找代码:表单提交返回的页面中模糊的Admin密码只显示六个项目符号,而我粘贴的实际密码只有30个字符长。)

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

    1. 它实际上只向DB服务器传递了六个字符的密码,还是只是UI故障?
    2. 即使在我弄清楚为什么它没有连接到数据库之后——如果真的是这样的话——“创建数据库 如果需要 “(在Admin用户名和密码条目上)真的很重要吗?或者即使指定的数据库已经存在,愚蠢的事情还会继续尝试创建数据库吗?
    3. 如果上面2的答案是“是的,它无论如何都会尝试创建数据库”,那么考虑到Heroku如何配置PostgreSQL数据库,建议采用什么方法来解决这个问题?
    1 回复  |  直到 10 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

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

    尝试以这种方式从访问服务器 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. 不适用:螳螂做得对。

    作为奖励答案,显然 not possible to create a lower-privileged user 在Heroku提供的PostgreSQL数据库中,您只能使用他们提供的一个用户。这有点糟糕。