2016年11月25日 星期五

下載備份 Google App Engine 應用程式檔案的新方式

之前我在 Hostinger 上申請的免費網站由於進行了大量運算被認為濫用免費資源而遭到停權 (我哪知道免費用戶的 CPU 使用量是多少啊), 結果促使我在前天向 Hostinger 購買了 Premium 虛擬主機服務. 但是我發現原先的免費帳號還是不斷地被之前設定的 GAE cron jobs 進行 query, 因此在寫信向 Hostinger 解釋之前必須先停止 GAE 上的 cron jobs 才行.

我參考了之前的文章去下載 GAE 應用程式以便檢查看看到底是哪一個應用程式在 trigger 我的 Hostinger 免費主機, 因為太久忘記了, 所以就從最接近的 appfog-twstockbot 開始查起 :

# 下載備份 Google App Engine 應用程式檔案的方法

但是照原先的方法下載卻發現不像以前那樣會在 DOS 命令列中直接詢問 Google 帳號密碼, 而是顯示如下訊息 :

Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation. 著作權所有,並保留一切權利。

E:\>appcfg.py download_app -A appfog-twstockbot -V 1 E:\gae\appfog-twstockbot
09:35 PM Host: appengine.google.com
09:35 PM Fetching file list...
Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&response_type=code&client_id=550516889913.apps.googleusercontent.com&access_type=offline

If your browser is on a different machine then exit and re-run this
application with the command-line parameter

  --noauth_local_webserver

這時 DOS 就僵在那邊無法動彈 (其實就是在等待我們使用瀏覽器進行 Google 帳號認證), 同時冒出一個視窗詢問要用哪一個瀏覽器認證, 選好後就會開啟瀏覽器連線到 Google 進行認證, 我的 Google 帳號採用兩階段認證, 因此必須用登記的手機接收認證碼, 驗證成功後會顯示要求授權存取 GAE 與 Google Cloud 頁面 :


按允許後結束認證, DOS 畫面即回應開始下載 :

Authentication successful. (認證通過)
09:36 PM Fetching files...
09:36 PM [1/10] main.py (這個檔案就是我要檢查的 cron table 觸發對象)
09:36 PM [2/10] extjs.htm
09:36 PM [3/10] jquery.htm
09:36 PM [4/10] index.yaml
09:36 PM [5/10] static/dataTables.zh-tw.txt
09:36 PM [6/10] html5.htm
09:36 PM [7/10] app.yaml
09:36 PM [8/10] cron.yaml (這是 cron table)
09:36 PM [9/10] default.htm
09:36 PM [10/10] favicon.ico

打開 main.py (此為 MTV 架構中的 View, 或 MCV 架構中的 Controller, 負責 routing) 檢查, 果然就是去觸發我在 Hostinger 申請的免費的 16mb.com 網址, 抓到了. 以前如果佈署完應用程式就馬上做紀錄的話, 現在也不會這麼費事去調查.

接著檢查其中的 cron.yaml, 其內容就是 cron table :

cron:
- description: fetch_twse_daily_close
  url: /fetch_twse_daily_close
  schedule: every day 16:00
  timezone: Asia/Taipei
- description: fetch_twse_daily_institutes
  url: /fetch_twse_daily_institutes
  schedule: every day 16:02
  timezone: Asia/Taipei
- description: technical_analysis
  url: /technical_analysis
  schedule: every day 16:04
  timezone: Asia/Taipei
- description: create_daily_report
  url: /create_daily_report
  schedule: every day 16:08
  timezone: Asia/Taipei
- description: fetch_daily_report
  url: /fetch_daily_report
  schedule: every day 16:10
  timezone: Asia/Taipei
- description: fetch_twse_daily_debit
  url: /fetch_twse_daily_debit
  schedule: every day 21:00
  timezone: Asia/Taipei
- description: fetch_2330_tw_basic
  url: /fetch_2330_tw_basic
  schedule: every 11 minutes
  timezone: Asia/Taipei
- description: fetch_2330_tw_dividend
  url: /fetch_2330_tw_dividend
  schedule: every 22 minutes
  timezone: Asia/Taipei
- description: fetch_2330_tw_analysis
  url: /fetch_2330_tw_analysis
  schedule: every 12 minutes
  timezone: Asia/Taipei
- description: fetch_2330_tw_balance
  url: /fetch_2330_tw_balance
  schedule: every 13 minutes
  timezone: Asia/Taipei
- description: fetch_2330_tw_cash
  url: /fetch_2330_tw_cash
  schedule: every 14 minutes
  timezone: Asia/Taipei
- description: fetch_2330_tw_income
  url: /fetch_2330_tw_income
  schedule: every 15 minutes
  timezone: Asia/Taipei
- description: fetch_2330_tw_profit
  url: /fetch_2330_tw_profit
  schedule: every 16 minutes
  timezone: Asia/Taipei
- description: fetch_2330_tw_owner
  url: /fetch_2330_tw_owner
  schedule: every 21 minutes
  timezone: Asia/Taipei
- description: fetch_yahoo_company
  url: /fetch_yahoo_company
  schedule: every 60 minutes
  timezone: Asia/Taipei
- description: fetch_yahoo_dealing
  url: /fetch_yahoo_dealing
  schedule: every 9 minutes
  timezone: Asia/Taipei
- description: fetch_yahoo_credit
  url: /fetch_yahoo_credit
  schedule: every 10 minutes
  timezone: Asia/Taipei
- description: fetch_yahoo_major
  url: /fetch_yahoo_major
  schedule: every 10 minutes
  timezone: Asia/Taipei
- description: fetch_yahoo_earning
  url: /fetch_yahoo_earning
  schedule: every 20 minutes
  timezone: Asia/Taipei

把第二行以下全部刪除, 只留第一行的 cron: 然後更新 cron table 即可終止 cron jobs 了. 參考 :

停止 GAE 的 cron jobs 的方法

接下來下達更新 cron 的指令 :

E:\>cd gae

E:\GAE>appcfg.py update_cron appfog-twstockbot
11:14 PM Host: appengine.google.com
11:14 PM Uploading cron entries.

E:\GAE>

註 : 加上 --oauth2 透過瀏覽器認證 (新版的 GAE SDK 已預設不須加, 較舊的則需要)

E:\GAE>appcfg.py --oauth2 update_cron appfog-twstockbot


注意, 不論是下載/上傳應用程式, 或者更新 cron 必須在應用程式 (此處為 appfog-twstockbot) 的上一層目錄 (此處為 GAE) 下執行, 參考 :

# GAE 的 Cron Job

所以上面下載應用程式應該在 E:\GAE 下比較一致 :

E:\cd GAE
E:\GAE>appcfg.py download_app -A appfog-twstockbot -V 1 appfog-twstockbot

最後補充一點, 如果不要用瀏覽器認證, 要像以前那樣直接在 DOS 輸入帳號密碼, 只要加上一些參數即可 :

appcfg.py download_app -A appfog-twstockbot -V 1 E:\gae\appfog-twstockbot --noauth_local_webserver

不過因為我的 Google 已經採用兩階段認證, 因此不能輸入 Google 密碼, 而是要輸入機器認證專用密碼, 我覺得還是用目前以瀏覽器進行認證較方便.

2016-12-26 補充 :

昨晚停掉 GAE 上的 appfog-twstockbot 應用的 cron 後, 果然就靜下來了 :


這樣就可以寫信給 Hostinger 說我的 16mb.com 免費主機只是做實驗用途, 不會再進行大量運算了, 希望他們可以恢復運作. 其實既然已經購買了 Premium 服務, 我是不需要這個免費主機, 但看到帳號底下有個 abuse 字樣總是不舒服, 而且無效的 cron 不斷運作也是耗損能源, 一切無效的動作都必須停止.

# https://cloud.google.com/appengine/docs/python/download

2016-11-27 補充 :

今天在鄉下老家電腦上用較舊版的 GAE SDK 照上面程序下載, 發現它還是跟以前一樣在 DOS 中詢問 Email 與密碼, 因為我的 Google 帳號已申請兩階段認證, 所以這密碼可不是 Google 帳號的密碼, 而是在 Google 帳號設定中授權 GAE 存取的另一組密碼, 我之前有特別記下來, 但是輸入後卻無法通過認證, 真是傷腦筋, 還要回去找之前所寫的紀錄, 很浪費時間. 我直接在 Google 搜尋, 馬上就找到結果了, 參考這篇 :

# 使用Google App Engine上傳程式, 一直要求輸入帳號密碼, 如何解決?

原來只要加上 --oauth2 就會透過瀏覽器進行 Google 帳號認證了, 例如 :

appcfg.py --oauth2 download_app -A appfog-twstockbot -V 1 E:\GAE\appfog-twstockbot



4 則留言 :

Unknown 提到...

請問現在GAE是發生了什麼問題嗎?
我開了新專案後發現都不能使用了

小狐狸事務所 提到...

GAE 還是可以用啊!

Unknown 提到...

開了新專案,資訊主頁看是有的
https://goo.gl/photos/3YGizfWrAYZd5aRP6

可是控制頁面就會出現錯誤
https://goo.gl/photos/Gq4fpfrz5y7BpBz89

Storage 無法使用
https://goo.gl/photos/7x3jXPJyoSAg4bVD6

App Engine 也無法使用
https://goo.gl/photos/Lao2EiWU3DVmW7159

選擇上傳則會顯示不存在
https://goo.gl/photos/Vk9XT18oLqd8dmBY6

小狐狸事務所 提到...

嗯, 好像有點問題. 我都在使用之前建立的 project, 沒有問題. 不知 Google 做了那些改變.