我已經在VirutalBox機器上的Ubuntu 20.04上設定了Mapbender。PostgreSQL、PostGIS和Geoserver都安裝在虛擬機上。我創建了一個地圖應用程式,并添加了一個搜索路由器功能(按照檔案中的指示)。搜索功能在開發環境中作業得很好,但在prod中卻不是。在開發環境中,它給出了一個結果,并且將滑鼠懸停在結果上突出顯示了該特征,點擊結果可以將地圖移動并放大到該特征。
在開發環境中,當輸入搜索字串并按下搜索鍵時,似乎沒有發生任何事情。開發工具報告了一個內部服務器錯誤500,這不是很有幫助。盡管在 Firefox 中,devtools 以紅色顯示 Referrer 策略 "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
通過Geoserver提供的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檔案也沒有被創建。即使創建了這個檔案也沒有對日志記錄產生任何影響。我不確定我錯過了什么。我想重申的是,搜索在開發環境中是正常的,所以看不出它是一個認證問題。我正在嘗試在虛擬機內的瀏覽器上的prod環境中進行搜索,因此使用localhost來訪問應用程式。
在開發工具上,我得到了以下結果:
在開發工具上,我得到了以下結果。
jquery.min.js:formatted:4210 POST`。
http: //localhost/mapbender1/application/bh_admin/element/337/0-ed10fcc5- 57e7-1f83-8a76-c32030225b85/search 500(服務器內部錯誤)。
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[/span]。
(匿名) @ jquery-ui.min.js:6。
(匿名) @ 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例外 SymfonyComponentDependencyInjectionExceptionServiceNotFoundException。 "你請求了一個不存在的服務 "doctrine.dbal.mobh_data_connection"。你是指這個嗎。 "doctrine.dbal.default_connection"?" 在 /var/www/mapbender1/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php 第348行 {"exception":"[object] (SymfonyComponentDependencyInjectionExceptionServiceNotFoundException(code: 0): 你請求了一個不存在的服務 "doctrine.dbal.mobh_data_connection"。你是說這個。 "doctrine.dbal.default_connection"? 在 /var/www/mapbender1/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:348)" } []
正如我之前提到的,開發應用程式能夠訪問該服務。這意味著,我想,DB 連接引數在 parameters.yml 和 config.yml 檔案中是正確的。因此,我感覺可能有一些快取專案需要更新,特別是Mapbender檔案中提到:
開發環境的快取機制的行為是 是不同的。并非所有的檔案都被快取,因此代碼的變化是直接 可見的。因此,app_dev.php的使用速度總是比 生產環境。
而且
目錄app/cache包含cache檔案。它包含了 每個環境(prod和dev)的目錄。但如前所述,dev-cache的機制 如前所述,dev-cache的機制有不同的表現。
如果對Mapbender界面或代碼進行了更改,那么 快取目錄(app/cache)必須被清除,以便在應用程式中看到這些變化。
uj5u.com熱心網友回復:
所以這變成了一個檔案夾權限問題。之所以開發環境可以作業,是因為開發環境比原版環境快取的組件更少,這使得對引數.yml和config.yml等組態檔的修改反映在開發環境中,而不是原版環境中。在設定和配置的程序中,cache/prod檔案夾的所有權轉到了root,這使得www-data用戶沒有對該檔案夾的適當訪問權。所以底線是,prod的快取沒有被更新,這使得資料庫連接服務對prod環境不可見,盡管引數.yml和config.yml有正確的設定。
因此,我所做的作業如下,請注意,我所執行的一些步驟可能是不必要的,但在這個階段,我不會去尋找哪個步驟不需要。
第一步,停止正在運行的服務(Apache和PHP服務器):
sudo app/console server:stop。
sudo service apache2 stop
清除prod快取:
sudo app/console cache:clear --env=prod --no-debug
我還使用了帶有no-warmup開關的cache:clear命令,這基本上讓你擁有一個幾乎是空的cache檔案夾。我發出這個命令是因為之前的命令在檔案夾中留下了一些檔案。
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檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310774.html
標籤:
