2015年5月29日 星期五

GAE 出現 Server Error 問題

今天財工程式告一段落, 把 GAE 的 cron table 修改後上傳 Google 讓心跳啟動, 但是連線 GAE 網站卻發現 Server Error :

Error: Server Error

The server encountered an error and could not complete your request.Please try again in 30 seconds.


事實上過了 30 秒再連線也是無濟於事, 因為這是我的 Python 程式有問題之故. 到 "Logs" 檢視 Error 原因, 發現是抓取信用額度總量管制餘額表的程式 fetch_twse_daily_debit.php 時出現錯誤 :

Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/base/data/home/apps/s~appfog-twstockbot/1.384633447891051628/main.py", line 228, in 
    ('/fetch_twse_daily_debit', fetch_twse_daily_debit),
NameError: name 'fetch_twse_daily_debit' is not defined

 原來我在 webapp2.WSGIApplication 中指派了 fetch_twse_daily_debit 這個 URL 所對應的 Class 名稱, 但是卻沒有定義這個類別的內容 :

    ('/fetch_twse_daily_institutes', fetch_twse_daily_institutes),
    ('/technical_analysis', technical_analysis),
    ('/create_daily_report', create_daily_report),
    ('/fetch_daily_report', fetch_daily_report),
    ('/fetch_twse_daily_debit', fetch_twse_daily_debit),

所以只要補定義此類別即可 :

class fetch_twse_daily_debit(webapp2.RequestHandler):
    def get(self):
        url="http://mystockbot.com/cron/fetch_twse_daily_debit.php"
        result=urlfetch.fetch(url, deadline=60)
        if result.status_code == 200:
            self.response.write(result.content)
        else:
            out="urlfetch failed"
            self.response.write(out)

這樣 GAE 就可正常運作了, 如下圖所示, 在 cron 啟動後的三個多小時因為程式錯誤導致所有 Request 都收到 500 Server Error 回應 (紅色), 改正後全部恢復正常的藍色了 :


先跑一個星期再來看看還要改哪裡.


沒有留言 :