Facebook(oauth)登入的最佳作法

(本文根據 Xdite 所分享的 Best Practice 整理而成,原文)

前置 Gemfile

gem "devise"  
gem "omniauth"  
gem "omniauth-facebook"  
gem "oauth2"  

Devise

安裝

rails g devise:install 
rails g devise MODEL 

產生 Authorization Model (提供多重認證用, 如果只有提供單一認證可以不產生...)

rails g model Authorization provider:string user_id:integer uid:string 
Read on →

用 Backup gem 實現簡單備份

簡單記錄一下 backup gem 的運作,首先安裝gem

gem install backup

然後產生設定檔及backup model

backup generate:config && backup generate:model --trigger "備份task名稱"  --storages="s3" --compressors="gzip"

接著就是設定備份

Read on →

自以為溫暖的一點點小事

在月台上看著高鐵進站,乘客很滿,待列車停穩後,走到事先訂好的座席旁,看到坐椅上有位上了年紀的婆婆,而她身旁的座位似乎是媳婦或女兒。婆婆看起來有點不安,緊緊握著她的手。於是我二話不說直接往別車廂移動。

婆婆別緊張。

working with pro

和專業的人一起工作學到的重要小事

之所以說是小事,是因為這些小事會引發整個團隊或個人在工作上的不便或缺失。於是小事也有記錄下來的必要

  1. 吃飯時間要固定

    • 原因是你一邊寫 code 還得一邊抵抗飢餓的感覺,再加上血糖降低,容易注意力渙散,這時間寫出來的 code 搞不好就是倒站的原兇。
    • 以及方便團隊其它成員找到你,及安排會議 / 討論。
  2. 早上十一點、下午五點 (吃飯前) 禁止 deploy

    • 原因也很簡單,因為你 deploy 不管是新版本或是新 feature 都可能會有炸掉的情況發生,運氣好的 rollback 就沒事,運氣不好的你還得餓著肚子解 bug,這時候又衝到原則一。於是就杯具了,不停在救火。
  3. 溝通需求 / 交代工作 請善用專案管理系統 ex. redmine

    • PM 或 leader 在溝通需求階段有時候必須要參考開發者的意見 (可不可行 / 有沒有更佳解法) 但這時候把開發者從寫 code 的感覺中打斷是很不智的事。所以應當在專案管理系統建立一個 issue 並將開發者加入監看以便開發者在審票的時候一起判斷。
    • 專案管理系統不只是開 bug / issue 的票,還有 雜項及支援 等性質。有需要和人溝通或協助,票開下去就對了。
    • 清楚明白知道目前哪一項工作踢到誰的身上,不會發生追不到人又一問三不知的狀況。 <!-- more -->
  4. 和有sense的開發者溝通,要以目的導向來描述需求。

    • 這邊說的是清楚交代,「因為怎樣的動機」和「你要達到什麼目的」ex.「我們想要知道每天上站使用者數量,因為想測試行銷的效果好不好」而不是「幫我在後台加一個表單,要顯示每天上站人數有多少」這種沒頭沒尾的需求,因為內行人都知道有太多現成的分析工具可以完成上述目的,但如果需求的動機不表達清楚,開發者還得憑空猜測你是不是因為 XXX 或 OOO 的理由所以要這個 feature 結果半猜半問神的結果就是效果不好又浪費時間。
  5. 時程很重要,到一定的 milestone 就要強迫上線

    • 如果沒有明定一個上線日期,沒有強迫推上某個版本,那就會一直想著「我還要加上XX功能」、「我要做到某某程度」才算是完善。結果就是不斷的被需求蓋過去,永遠無法把產品推給使用者。
  6. 開發功能或問題要被整理過且有先後順序

    • 地基沒有打穩,就不要想把大樓蓋的多花俏,所以基礎建設永遠是第一步。提出需求的人可以把後面的願景想的很好,但開發者絕對不會第一時間就幫你把 fancy 的東西堆出來。
  7. 發生問題就要思考如何解決,而不是讓重複的事情不斷發生

    • 檢討生活 / 工作中遇到的問題,諸如睡不飽這樣的狀態也是會影響工作效率,問題的發生自有原因,就必須要被解決。
  8. To Be Continued

Read on →

這兩星期的Rails筆記

這裡記錄了我被xdite大神電過的東西,希望寫下來可以提醒自己不要再犯同樣的錯誤

  1. 千萬不要在 view 裡面幹出運算或邏輯,把要算的東西用 helper 包起來 render
  2. 要接連續字串,使用 "#{str1} #{str2}" 的方式,不要用 "+"
  3. 寫 rake task 時用到的 model 物件, 必須是 app/models/ 裡面的檔名. 而不是 db 實際的 table 名. (當然按照慣例, 這兩者會是一樣的. 但如有不同時, 以 app/models/ 裡的檔名為準.
  4. 在寫 customized 404 / 500 page 時, routes.rb 的 unless 判斷要放在 code 的最下面. 才不會把所有 request 都截下來變 404.
  5. 在 Rails Console 裡要試驗 module 的方法 include ModuleName
  6. object 狀態要在 model 裡 def method 來定義,而不是由 controller 從 object 的 column 去組出狀態 ( 直觀 <=> 非直觀 )
  7. 命名原則要讓人看的懂. ex auth_gsm => 到底是表達「認證的狀態」還是「認證用的手機號碼」,詳細可以參照這篇
  8. HTTP method 動詞要慎用, 見附表.
  9. 開發版的假圖要丟在 public/fake/ 而不是 assets/images/, 避免在正式版本會一起壓進 assets 然後又忘記刪除.
  10. To Be Continued
methods
Action   HTTP Method  Purpose
-------------------------------------------------------------------------
index    GET          Displays a collection of resources
show     GET          Displays a single resource
new      GET          Displays a form for creating a new resource
create   POST         Creates a new resource (new submits to this)
edit     GET          Displays a form for editing an existing resource
update   PUT          Updates an existing resource (edit submits to this)
destroy  DELETE       Destroys a single resource

devise message not listed in locale file

You have signed up successfully. However, we could not sign you in because your account is unconfirmed.
很玄妙的一個字串, 翻遍了 locale 檔都找不到. 本來想說是靈異現象. 再度上網拜神, 發現原來還需要自己多加一項在 registrations 下

inactive_signed_up: '你已成功註冊,請至您的信箱收取認證信,開通帳號。'

問題解決,可喜可樂。