【问题标题】:Search DB only working in php dev environment搜索数据库仅在 php 开发环境中工作
【发布时间】: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


【解决方案1】:

所以这原来是一个文件夹权限问题。 dev 环境正常工作的原因是因为 dev 缓存的组件比 prod 少,这使得对参数.yml 和 config.yml 等配置文件的更改反映在 dev 中而不是 prod 中。在设置和配置过程中的某个时刻,cache/prod 文件夹的所有权转到了 root,这使 www-data 用户没有对该文件夹的适当访问权限。所以底线是,prod 缓存没有被更新,这使得数据库连接服务对 prod 环境不可见,尽管 parameters.yml 和 config.yml 具有正确的设置。

所以我做了以下事情,注意到我执行的一些步骤可能是不必要的,但在这个阶段我不会去寻找不需要的步骤。

第一步,停止正在运行的服务(Apache和PHP服务器):

sudo app/console server:stop
sudo service apache2 stop

清除产品缓存:

sudo app/console cache:clear --env=prod --no-debug

我还使用了带有 no-warmup 开关的 cache:clear 命令,这实际上给您留下了一个几乎空的缓存文件夹。我发出了这个命令,因为上一个命令在文件夹中留下了一些文件。

sudo app/console cache:clear --env=prod --no-warmup

安装资产:

sudo app/console assets:install web --env=prod

授予 www-data 用户正确的文件夹权限:

sudo chown -R www-data:www-data /var/www/mapbender/app/cache
sudo chmod -R ug+w /var/www/mapbender/app/cache

启动 Apache 和 PHP 服务器:

sudo service apache2 start
sudo app/console server:start

注意,app/console 需要从文件夹 /var/www/mapbender 执行

就像我之前提到的,可能会有不必要的步骤,但这或多或少是我所做的,现在应用程序按预期运行。

免责声明:我不是开发人员,此处提供的信息来自多个来源,包括 Mapbender documentation

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 2011-03-13
  • 2013-10-04
  • 2014-05-20
相关资源
最近更新 更多