2016-11-18 78 views
3

我有一個具有休息終點和Web終點的應用程序。在不同的端口上使用dev_appserver.py運行多個服務

我想運行REST和WEB服務本地使用dev_appserver.py

我曾嘗試以下

dev_appserver.py rest_app.yaml --port=5010 --admin_port=8000

dev_appserver.py web_app.yaml --port=5011 --admin_port=8001

我看到的一個下面的錯誤我服務(休息服務)

`OperationalError: database is locked` 

我必須做任何特別的事情,以確保這些服務可以讀/寫共享數據庫沒有任何條件(或類似的壞事!!)

我的目標是運行多個服務(休息和網絡這種情況)在本地,這些服務應該是數據。什麼是最好的方式(在本地使用dev_appserver.py)和GAE本身(當我將應用程序推向GAE時,會出現這種情況:D)

+0

你爲什麼雖然這些治療作爲單獨的項目?爲什麼不同路徑的服務相同? –

回答

5

你得到的原因是實例將碰撞試圖訪問相同的數據庫本地存儲目錄,默認情況下,該目錄是根據應用程序的名稱確定的 - 對於同一應用程序的2個服務而言是相同的。避免這樣的碰撞

一種方式是也指定本地存儲目錄中,使用dev_appserver.py--storage_path可選參數(其可以經由dev_appserver.py --help看到):

--storage_path PATH path to the data (datastore, blobstore, etc.) 
         associated with the application. (default: None) 

然而,使用2條不同的存儲路徑可能會產生意想不到的結果 - 如果您的服務引用了該存儲中相同的信息,他們可能會看到不同的值。

dev_appserver.py與同一應用的多個服務一起使用的正確方法是通過單個dev_appserver.py實例運行所有服務,該實例將爲每個服務分配不同的端口。

例如我有一個3服務和使用調度文件的應用程序。這是我從應用程序目錄調用開發服務器的方式,這是3個服務目錄的父目錄(調度文件必須是.yaml文件參數列表中的第一個,我始終遵循它的默認模塊,在我的情況main/main.yaml):

/usr/bin/python2.7 /usr/local/google_appengine/dev_appserver.py --host 0.0.0.0 --log_level=debug dispatch.yaml main/main.yaml buildin/buildin.yaml apartci/apartci.yaml 

這是怎麼devserver自動分配每個服務偵聽的端口,當服務器開始顯示出來:

INFO  2016-11-18 14:20:53,329 api_server.py:205] Starting API server at: http://localhost:40310 
INFO  2016-11-18 14:20:53,330 dispatcher.py:185] Starting dispatcher running at: http://0.0.0.0:8080 
INFO  2016-11-18 14:20:53,345 dispatcher.py:197] Starting module "default" running at: http://0.0.0.0:8081 
INFO  2016-11-18 14:20:53,353 dispatcher.py:197] Starting module "buildin" running at: http://0.0.0.0:8082 
INFO  2016-11-18 14:20:53,361 dispatcher.py:197] Starting module "apartci" running at: http://0.0.0.0:8083 
INFO  2016-11-18 14:20:53,362 admin_server.py:116] Starting admin server at: http://localhost:8000 
+0

- 在開發環境中運行兩個不同的項目時,storage_path幫助我。然而,似乎來自一個應用的日誌出現在另一個應用中? – Fakeer

+0

它們不是不同的應用程序,它們是同一應用程序的不同服務。或者至少這就是這種方法所考慮的。是的,devserver一起顯示日誌,在真正的GAE下可以通過服務進行過濾。 –

相關問題