2012-09-25 73 views
1

試圖使用Google App Engine的remote_api,以便我們可以通過IDE進行逐行調試。使用GAE遠程API從localhost進行調試 - 連接太晚?

遠程API首先運行良好。該應用程序能夠成功從數據庫中檢索信息。 wepapp響應客戶端瀏覽器時發生錯誤。

驗證碼:

它非常類似於App Engine的documentation給出的例子:

from model import My_Entity 
from google.appengine.ext.remote_api import remote_api_stub 

# Test database calls 
def get(w_self): 
    remote_api_stub.ConfigureRemoteApi(None, '/_ah/remote_api', auth_func, 'myapp.appspot.com') 

    t_entity = My_Entity.get_by_key_name('the_key') 

    w_self.response.set_status(200) 

    # The error occurs AFTER this code executes, when webapp actually responds to the browser 

錯誤回溯:

錯誤似乎涉及到Blob存儲區。

遠程API是否被初始化爲代碼太晚?

...在webapp通過localhost服務器與blobstore做了什麼之後?那麼遠程api可能會將請求重定向到服務器中的blobstore,而不是webapp期待它的本地主機調試服務器?

 
Traceback (most recent call last): 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2795, in _HandleRequest 
    login_url) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3622, in CreateImplicitMatcher 
    get_blob_storage) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_blobstore.py", line 420, in CreateUploadDispatcher 
    return UploadDispatcher() 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_blobstore.py", line 307, in __init__ 
    get_blob_storage()) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_blobstore.py", line 79, in GetBlobStorage 
    return apiproxy_stub_map.apiproxy.GetStub('blobstore').storage 
AttributeError: 'RemoteStub' object has no attribute 'storage' 

遠程api是否應該在代碼的其他地方初始化?

或者這個問題與其他事情有關嗎?

非常感謝!

+0

是否使用您的HTTP內remote_api的得到處理? – dragonx

+0

您可能需要在服務器啓動時而不是每次請求時初始化遠程API。 – dragonx

+0

@dragonx - 聽起來更好。你現在應該把它放在GAE代碼中嗎? –

回答

0

爲了得到這個工作,你可以使用測試平臺的幫助下,開始被丟失的存根:

ADDRESS=.... 
remote_api_stub.ConfigureRemoteApi(None, '/_ah/remote_api', auth_func, ADDRESS) 

# First, create an instance of the Testbed class. 
myTestBed = testbed.Testbed() 

# Then activate the testbed, which prepares the service stubs for use. 
myTestBed.activate() 

# Next, declare which service stubs you want to use. 
myTestBed.init_blobstore_stub() 
myTestBed.init_logservice_stub()