Postgresql “错误数据库”/&引用;OpenShift上的已缩放JBoss应用程序上不存在

Postgresql “错误数据库”/&引用;OpenShift上的已缩放JBoss应用程序上不存在,postgresql,jboss,openshift,Postgresql,Jboss,Openshift,我用JBoss AS7和Postgres DB在OpenShift上的一个非缩放应用程序中部署了一个WAR,效果很好。 我在一个缩放的应用程序中部署了相同的WAR(否则设置相同),每当它尝试与DB对话时,它都会失败。 错误是:org.postgresql.util.psqleexception:FATAL:数据库“/”不存在 由于HAProxy.cfg假定域根上下文(即“/”),但实际上下文包括WAR文件名(即“/warname/”),因此HAProxy配置也有类似的问题。更新haproxy.c

我用JBoss AS7和Postgres DB在OpenShift上的一个非缩放应用程序中部署了一个WAR,效果很好。 我在一个缩放的应用程序中部署了相同的WAR(否则设置相同),每当它尝试与DB对话时,它都会失败。 错误是:org.postgresql.util.psqleexception:FATAL:数据库“/”不存在

由于HAProxy.cfg假定域根上下文(即“/”),但实际上下文包括WAR文件名(即“/warname/”),因此HAProxy配置也有类似的问题。更新haproxy.cfg以修复上下文解决了这个问题,我猜有一个类似的配置解决方案可以连接到DB,因为应用程序是可伸缩的,所以DB处于单独的状态

谁能把我引向正确的方向


谢谢

如果您运行的是缩放应用程序,PostgreSQL在其上运行的端口是非标准端口,请确保您正在使用所有环境变量连接到数据库,并且应该正常。SSH进入您的设备并运行
env | grep POSTGRES
,您应该看到您应该使用的所有环境变量。还请注意,您的主机现在是FQDN,而不是本地地址。

事实证明,OPENSHIFT_POSTGRESQ_DB_URL环境变量可能包含也可能不包含尾随“/”(对于非缩放应用,它不在那里,对于缩放应用,它是),因此添加“/dbname”适用于非缩放应用,但对于缩放应用,它会加倍“/”,这显然是错误的。通过编写更安全的代码来检查尾随“/”的存在,问题就解决了。

感谢developercorey的快速回复。我已经在代码中使用了env变量。在非缩放应用程序和缩放应用程序中,这是一场同样的战争。这里有一段摘录:
uridburi=newuri(System.getenv(“OPENSHIFT\u POSTGRESQL\u DB\u URL”)+“/”+System.getenv(“PGDATABASE”)
if(dbUri!=null&&dbUri.toString().length()>0){
`dbData.user=new dbData();`dbData.user=dbUri.getUserInfo().split(“:”[0];`dbData.password=dbUri.getUserInfo().split(“:”[1];`String port=String.valueOf(dbUri.getPort());`dbData.dbUrl=“jdbbc:postgresql:/”+dbUri.getHost()+“:”+dbUri.getPath()“`
}
因此,在缩放版本中,我肯定还缺少一些不同的东西。您是否设置了自己的环境变量PGDATABASE?默认情况下,它是您的OPENSHIFT_应用程序_名称作为数据库名称…否。有几个以“PG”开头的环境变量是自动设置的(对于我的应用程序的两个版本):PGPORT、PGUSER、PGPASSWORD、PGHOST和PGDATABASE。除了具有匹配的OPENSHIFT_应用程序_名称的PGDATABASE之外,所有都具有以OPENSHIFT_POSTGRESQL_DB_开头的相应环境变量。我发现(现在仍然发现)这些重复的环境变量的存在很奇怪。它们的值都匹配,除了PGHOST,它是奇怪的空白。