我已經在VirutalBox機器上的Ubuntu20.04上安裝了Mapbender。PostgreSQL、PostGIS和Geoserver都安裝在VM上。我創建了一個地圖應用程序,并添加了一個搜索路由器功能(按照文檔中的說明操作)。搜索在dev環境中工作得很好,但在prod中則不然。在開發環境中,它會給出一個結果,將鼠標懸停在結果上會高亮顯示該功能,并單擊結果將地圖移動和縮放到該功能。
在prod環境中,鍵入搜索字符串并按search時似乎什么都沒有發生。devtools報告一個內部服務器錯誤500,這不是很有幫助。盡管在Firefox中,devtools以紅色顯示referer policy"strict-origin-when-cross-origin。
我已經將Postgres配置文件修改為Listeners=*和host0.0.0.0,以確保這不是數據庫訪問問題。
主機:Windows 10 Pro 20H2
來賓計算機:Ubuntu 20.04
Mapbender 3.2.6
帶有Postgis 3.0的數據庫Postgresql 12.8
通過Geoserver提供WMS服務
PHP7.2
雖然我不確定我是否提供了正確診斷問題的所有信息,但對于如何調查此問題并解決此問題的任何指示,我們都將不勝感激。
Update:
我通過設置以下開關修改了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文件。即使創建文件也不會對日志記錄產生任何影響。我不確定我錯過了什么。我想重申的是,搜索是在開發環境中進行的,所以我看不出這是一個身份驗證問題。我嘗試在虛擬機內的瀏覽器上的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),
Update 2
根據@IonBazan的建議,我找到了prod.log文件,盡管它位于不同的文件夾中,錯誤表明找不到數據庫服務。日志文件位于:
var/www/mapbender1/app/logs
這是日志文件中的消息:
request.CRITICAL:未捕獲的PHP異常Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException:“您請求了一個non-existent服務"doctrine.dbal.mobh_data_connection"。您的意思是:"doctrine.dbal.default_connection"?在/var/www/mapbender1/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php行348{“Exception”:“[對象](Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException(代碼:0):您請求了一個non-existent”服務"doctrine.dbal.mobh_data_connection"。你的意思是:"doctrine.dbal.default_connection"?在/var/www/mapbender1/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:348“}[]
正如我前面提到的,dev應用程序能夠訪問服務。我想,這意味著parameters.yml和config.yml文件中的DB連接參數是正確的。所以我感覺可能有一些緩存項需要更新,特別是Mapbender文檔提到:
development-environment的cache-mechanism的行為不同:并非所有文件都被緩存,因此代碼更改是直接可見的。因此app_dev.php的使用總是比production-environment慢。
And
目錄app/cache包含cache-files。它包含每個環境(prod和dev)的目錄。但是dev-cache的機制,如前所述,表現不同。
如果對Mapbender接口或代碼進行了更改,則必須清除cache-directory(app/cache)以查看應用程序中的更改。
所以這是一個文件夾權限問題。dev環境工作的原因是dev緩存的組件比prod少,這使得對parameters.yml和config.yml等配置文件所做的更改反映在dev中,而不是在prod中。在安裝和配置過程中的某個點上,cache/prod文件夾的所有權歸根目錄,而根目錄保留了www-data用戶沒有對該文件夾的正確訪問權限。因此,盡管parameters.yml和config.yml具有正確的設置,但prod緩存沒有被更新,這使得數據庫連接服務對prod環境不可見。
因此,我做了如下工作,注意到我執行的一些步驟可能是不必要的,但在這個階段,我不會去尋找不需要的步驟。
第一步,停止運行服務(Apache和PHP服務器):
清除產品緩存:
我還使用了帶有no-warmup開關的cache:clear命令,這實際上給您留下了一個幾乎為空的緩存文件夾。
安裝資產:
為www-data用戶授予適當的文件夾權限:
啟動Apache和PHP服務器:
注意,app/console需要從/var/www/mapbender文件夾執行
正如我前面提到的,可能會有不必要的步驟,但這或多或少是我所做的,現在應用程序正在按預期工作。
免責聲明:我不是開發人員,此處提供的信息來自多個來源,包括Mapbender文檔。