【发布时间】:2021-11-03 04:03:58
【问题描述】:
我在 VirutalBox 机器上的 Ubuntu 20.04 上设置了 Mapbender。 PostgreSQL、PostGIS 和 Geoserver 都安装在 VM 上。我创建了一个地图应用程序并添加了一个搜索路由器功能(按照文档中的说明进行操作)。搜索在开发环境中就像一种魅力,但在产品中却不是。在开发环境中,它会给出一个结果并将鼠标悬停在结果上会突出显示该功能,然后单击该结果会移动地图并将其缩放到该功能。
在 prod 环境中,键入搜索字符串并按搜索时似乎没有任何反应。 devtools 报告内部服务器错误 500,这不是很有帮助。尽管在 Firefox 中,devtools 以红色显示引用策略“strict-origin-when-cross-origin”。
我已经将 Postgres 配置文件修改为 Listeners = * 和 host 0.0.0.0 以确保它不是数据库访问问题。
主机:Windows 10 Pro 20H2
访客机器:Ubuntu 20.04
Mapbender 3.2.6
数据库 Postgresql 12.8 和 Postgis 3.0
WMS 通过地理服务器提供服务
PHP7.2
虽然我不确定我是否提供了所有信息来正确诊断问题,但我们感谢任何有关如何调查和解决此问题的指示。
更新:
我通过设置以下开关修改了 php.ini 以启用错误日志记录:
error_reporting = E_ALL
display_errors = Off
log_errors = On
ignore_repeated_errors = On
ignore_repeated_source = Off
error_log = /var/log/apache2/php_errors.log
但到目前为止没有记录任何错误,也没有创建 php_errors.log 文件。即使创建文件也不会对日志记录产生任何影响。我不确定我错过了什么。我想重申,虽然搜索在开发环境中工作,所以看不出它怎么可能是一个身份验证问题。我正在尝试在 VM 中的浏览器上的 prod 环境中进行搜索,因此使用 localhost 来访问应用程序。
在开发工具上,我得到以下信息:
jquery.min.js:formatted:4210 POST`
http://localhost/mapbender1/application/bh_admin/element/337/0-ed10fcc5-57e7-1f83-8a76-c32030225b85/search 500 (Internal Server Error)
send @ jquery.min.js:formatted:4210
ajax @ jquery.min.js:formatted:3992
n.<computed> @ jquery.min.js:formatted:4044
getJSON @ jquery.min.js:formatted:4033
_search @ js:14187
(anonymous) @ jquery-ui.min.js:6
(anonymous) @ js:13976
dispatch @ jquery.min.js:formatted:2119
r.handle @ jquery.min.js:formatted:1998
点击 jquery.min.js:4210 时,文件中会突出显示以下行:
g.send(b.hasContent && b.data || null),
更新 2
根据@IonBazan 的建议,我找到了 prod.log 文件,尽管它位于不同的文件夹中,但错误表明找不到数据库服务。日志文件位于:
var/www/mapbender1/app/logs
这是日志文件中的消息:
request.CRITICAL:未捕获的 PHP 异常 Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: “您请求的服务不存在 “教义.dbal.mobh_data_connection”。你是不是这个意思: “doctrine.dbal.default_connection”?”在 /var/www/mapbender1/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php 第 348 行 {“异常”:“[对象] (Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException(代码: 0):您请求的服务不存在 “教义.dbal.mobh_data_connection”。你是不是这个意思: “教条.dbal.default_connection”?在 /var/www/mapbender1/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:348)"} []
正如我之前提到的,开发应用程序能够访问该服务。这意味着,我想,数据库连接参数在 parameters.yml 和 config.yml 文件中是正确的。所以我感觉可能有一些缓存项需要更新,尤其是Mapbender documentation 提到这一点:
开发环境的缓存机制的行为 不同:并非所有文件都被缓存,因此代码更改直接 可见的。因此 app_dev.php 的使用总是比 生产环境。
和
目录 app/cache 包含缓存文件。它包含了 每个环境(prod 和 dev)的目录。但其机制 如前所述,开发缓存的行为有所不同。
如果对 Mapbender 界面或代码进行了更改,则 缓存目录 (app/cache) 必须被清除才能看到 应用程序。
【问题讨论】:
-
检查服务器上的 php 错误日志。可能是身份验证问题,但可能是任何类型的缺失组件。检查你的数据库密码
-
我试图查看 /var/log/apache2 但遇到错误时 error.log 文件没有更新。我应该在其他地方寻找 php 错误日志吗?
-
启用日志写入,同时通过创建数据库健康检查确保它没有数据库/权限问题,触发器从数据库中提取当前时间戳。
-
查找 php 错误日志可能会很痛苦。该位置应在 php.ini 中,并且可能需要启用。
-
这个问题是用 Symfony 标签标记的,所以我假设应用程序是用这个框架编写的。如果是,您应该检查
var/log/prod.log文件以获取线索。
标签: php postgresql symfony mapbender3