讓 Django 專案直接開上GAE@coscup2011

6,293 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,293
On SlideShare
0
From Embeds
0
Number of Embeds
2,677
Actions
Shares
0
Downloads
47
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

讓 Django 專案直接開上GAE@coscup2011

  1. 1. GAE<br />讓 Django專案直接開上 GAE<br />好險網 <br />Winston@insureme.com.tw <br />Ijs@insureme.com.tw<br />2011.8.21@COSCUP2011<br />陳翅膀、王貓貓,上台鞠躬<br />
  2. 2. 2011年2月<br />
  3. 3. 四個年輕人因為創業的夢<br />
  4. 4. 他們組成了驚奇四超人?<br />
  5. 5. 資訊技術<br />理財知識<br />
  6. 6. 精實創業<br />沒錢、沒閒、沒資源<br />
  7. 7. 頻寬?<br />豐富のIT資源?<br />No way !!<br />效能?<br />Server?<br />Framework?<br />
  8. 8. 沒錢Prototype 還是要做!<br />
  9. 9. 好在我們有廣大的免費 / OSS資源<br />
  10. 10. python<br />Django<br />GAE<br />找齊夥伴,朝偉大航道邁進,前進!!!<br />
  11. 11. 屎了!<br />
  12. 12. GAE太害羞,不太想讓 Django騎^H上毛病一堆<br />GAE<br />
  13. 13. IDon’tWant!<br />ToUsegoogle.appengineobjs<br />ToUseonlygoolgeusermanagementsystem<br />Thehasslesofrewritingthecodestoportthelegacysystem<br />No, no, no~ 那一點都不fashion<br />
  14. 14. “念”你<br />我的字典裡沒有~放棄<br />因為已鎖定D<br />我從不做空白的Coding~<br />因為已決定D<br />眼見這月亮悄悄溜走<br />又見那太陽緩緩升起<br />多少Solution變換<br />多少Study Cases<br />Debug不偷懶始終如一…<br />
  15. 15. 終於!我們找到了….<br />
  16. 16. 一個框架與平台合作無間的故事<br />DjangoNonrel<br />djangoappengine<br />
  17. 17. DjangoNonrel<br />獨立於官方Django之外<br />加入NoSQL Database 功能來支援 ORM<br />DjangoNonrel表示:<br />整個場面我hold住!<br />
  18. 18. DjangoNonrel原理?<br />
  19. 19. 為何要選DjangoNonrel?<br />可以把程式轉到 non-relational DBs 上<br />可以把程式PO回 SQL DBs 上<br />不用手動 / 程式處理Denormalization<br />
  20. 20. 為何要選DjangoNonrel?<br />不用手動改寫下列querie<br />(JOINs, select_related(), etc.)<並非全部支援><br />不會被鎖在單一平台提供商(GAE,etc.)<br />
  21. 21. DjangoNonrel 目前支援<br />GAE跟djangoappengine混搭<br />MongoDB跟MongoDB backend 混搭<br />
  22. 22. DjangoNonrel開發支援中的<br />ElasticSearch<br />Cassandra<br />更多訊息:<br />http://www.allbuttonspressed.com/projects<br />/django-nonrel<br />
  23. 23. Djangoappengine<br />內藏Django App Engine 後台整合:<br /> DB<br /> Email<br />一定要跟DjangoNonrel混搭<br />
  24. 24. 來玩一下吧!<br />
  25. 25. 從頭開始專案,吃蛋糕一樣!<br />下載樣板專案<br />複製所有.py 與.yaml到你專案的根目錄<br />接著:<br />
  26. 26. 從頭開始專案,吃蛋糕一樣!<br />下載並複製以下資料夾到指定地點:<br />
  27. 27. 從頭開始專案,吃蛋糕一樣!<br />目前專案的資料夾看起來是這樣:<br />
  28. 28. 那我的Dependency呢?<br />耶?好像沒有辦法裝在GAE上!?<br />但是可以『打包』整包的原始碼呀~<br />放在專案根目錄下就ok啦!<br />
  29. 29. 那我的Dependency呢?<br />檔案太多了?<br />GAE有3000個檔案的限制!<br />Zip起來,放在根目錄的zip-packages下<br />注意:<br />請不要 zip 所有在settings.py中INSTALLED_APPS下的dependency<br />
  30. 30. 在自己的機器上試試看!<br />winston_awesome>pythonmanage.pyrunserver<br />Try it!<br />
  31. 31. 丟上GAE跑跑看吧!<br />winston_awesome>pythonmanage.pydeploy<br />Try it!<br />
  32. 32. DEMO<br />
  33. 33. It works!<br />
  34. 34. 關於備份資料…<br />直接使用 Google 提供的工具!<br />Bulkloader<br />http://code.google.com/appengine/docs/python/tools/uploadingdata.html<br />如果你想用聽起來更屌的:<br />Gaebar<br />http://aralbalkan.com/1784(沒測過,不負責推薦)<br />
  35. 35. 限制是…<br />請不要用JOIN !!(沒差,對我來說,JOIN很不直覺)<br />沒有 many-to-many 的關係<br />沒有Aggregates<br />沒有transactions <br />但可以用GAE 的run_in_transaction()<br />沒有QuerySet.select_related()<br />
  36. 36. 如果我想PO舊的APP呢?<br />改一下setting.py 資料庫與 INSTALLED_APPS<br />把你Dependency的原始碼打包進來<br />對!這樣就ok了!<br />
  37. 37. DEMO<br />
  38. 38. GAE<br />開上?騎上?坐上?都行啦!反正…你懂得>///<<br />
  39. 39. 還有一些東西要注意!<br />如果你的APP有用JOINs或是其他沒有支援的語法<br />你必須要改寫過!<br />
  40. 40. 把你SQL的資料放上GAE?<br />這是個『異常痛苦』的經驗!<br />試過很多辦法,包括混搭 djangoterminal 與threads<br />
  41. 41. 把你SQL的資料放上GAE?<br />如果你真的要做,請愛用Google的方式<br />googlemapreduce 與 CSVfile 上傳!(但是!還是很難用!)<br />
  42. 42. 用CSV上傳整個資料庫<br />單一檔案大小上限:1MB<br />也就是說….如果你的資料庫CSV有1G,你要上傳1024個檔案…XD<br />但這比較是GAE的問題啦!<br />
  43. 43. GAE還有什麼問題?<br />免費的總是最貴,資源限制一堆<br />尤其是:<br />流量 / 頻寬!<br />
  44. 44. 一不小心,就會發生杯具…<br />(3616 hits, 295 IPs) @ 20:00<br />Pingooo回到電腦前<br />Pingooo當司機<br />Yoooooooooo它就漫出來了oooooooo!!!<br />
  45. 45. 後來,我總算學會了如何去省……<br />節省資源,從小地方做起!<br />
  46. 46. 把靜態檔案切割搬出去!<br />
  47. 47. Yahoo~~<br />
  48. 48. Pinext!<br />
  49. 49. Murmur….<br />
  50. 50. jQuery<br />
  51. 51. 隨便包個測測…<br />
  52. 52. BonusSession<br />Cache<br /> 直接使用Django對memcache module的API ,不需要使用GAE提供的<br />memcache backend 預設是開啟的<br />
  53. 53. BonusSession<br />檔案上傳 / 下載<br />請愛用django-filetransfers<br />複製“filetransfers”資料夾到根目錄<br />新增“filetransfers”到 INSTALLED_APPS <br />
  54. 54. BonusSession<br />檔案上傳 / 下載<br />App Engine Blobstore預設是開啟的<br /> 詳細資料<br />http://www.allbuttonspressed.com/projects/django-filetransfers<br />
  55. 55. BonusSession<br />Task<br />還沒好DjangoAppEngine團隊正在開發中….<br />這時候,只能用Google的<br />http://code.google.com/appengine/docs/python/taskqueue/<br />
  56. 56. ToGAEorNotToGAE?<br />Task<br />Transaction<br />
  57. 57. 結論– 何時用?<br />DjnagoNonrel+Djangoappengine<br />django-social-auth<br />有個舊的djangoapp<br />
  58. 58. 結論 – 切忌<br />請記住:不要用JOINs<br />(或其他不支援的語法)<br />
  59. 59. 結論– 最適合<br />DjangoNonrel+Djangoappengine最好拿來<br />Prototyping<br />Homework<br />
  60. 60. 結論 – 所以到底要不要?<br />誰知道?<br />說不定你會愛上GAE上的Django<br />
  61. 61. 參考資料<br />Django-nonrel & webdev blog<br />http://www.allbuttonspressed.com/<br />DjangoSnippets<br />http://djangosnippets.org/snippets/1003/<br />Django<br />https://www.djangoproject.com/<br />GoogleAppEngine<br />http://code.google.com/appengine/<br />
  62. 62. 更多後續<br />好險有科技<br />http://techblog.insureme.com.tw<br />好險網<br />http://www.insureme.com.tw<br />
  63. 63. 感謝<br />好險技術團隊所有夥伴<br />Eric Wu, EragonJ, ygtw, 藏鏡人一號<br />COSCUP 2011籌備團隊<br />各位台下聆聽的你!<br />陳翅膀、王貓貓,下台鞠躬<br />
  64. 64. Q&A?<br />

×