Official Blog including Rails / Web Development / Startup topics

Upgrade 到 Rails4 的一些感想

Rails4 在前天的 RailsConf 2013 釋出 Rails 4.0 RC1 了,這也表示大家應該可以進場了。

上個月在 Rails 4.0 beta1 時為了練手感,把手上的一個中小 production 專案,也上了 rails4 branch。

大概有幾個感想:

  • Upgrading to Rails4 這本書強烈建議要買,才 $15 USD,可以節省你不少 debug 時間。

  • 升 Rails4 建議不只開 branch,也用 rvm 開一個 gemset 出來作,因為 gem dependency 變更蠻多的。

  • rails4_upgrade 要裝。這個 gem 蠻好用的..可以幫你掃 dependency 問題。事實上 Rails3 升 Rails4 最討厭的是 gem dependency tree,因為 Rails 3 已經出太久了(幾乎快兩年了吧),很多 Gemfile 都強綁定 3 ,所以升 Gemfile 時會出現很多問題...

  • major gem,如 simple_form, devise, 幾乎都有 beta1 版,裝了就保證可以動。小的 gem 也幾乎都有 rails4 branch 可以 hotfix。(起碼我在 beta1 進場時遇到的問題就幾乎都有解,所以在 rc1 的狀況應該會更好)

  • 這次 Rails4 的改動,我個人的感想會是 Rails3 的 New Feature, Better syntax Version。如果平常 code 都寫的蠻漂亮(接口和封裝乾淨)的話,升級應該是沒有太痛才對。唯一讓人很煩的就是 gem dependency 解不完,還有牽扯到 scope 與 query 的部份幾乎都要重寫..:/ (目前是都還跳 warning 而已,但真要清 warning,如果 model 裡面 condition 很多,真的會清到手快斷...)

  • 有關於 New Feature 與 Better syntax 這個議題,我應該週末會寫一篇出來..

  • Rails project 的本體內容物是沒有改動太大,但大家拿來 build gem 的 internal API 改不少,這也難怪 Jose Valim 這一兩天也同步釋出了 Crafting Rails Applications (2nd edition): Expert Practices for Everyday Rails Development 第二版的 beta。我這幾天改 gem 要升 Rails4 也是中了一堆 api 變更的地雷…

  • 會逼大家都改 gem 的原因是因為是,連 migration api 都改了,所以只要提供產生 migration 的 gem 通通會逼要升 Rails4,真是個好招 -_- (連我只有兩個 commit 的 AutoFacebook gem 也不能倖免。解法在這裡

  • Obie Fernandez 前天也宣布了 Rails 聖經 The Rails 4 Way開始 beta。值得注意的是他這次是使用 Leanpub 釋出書籍的 beta,而非走 Informit 的 RoughCut 版本。

  • 為什麼我有時間測這些東西?好問題,我也不知道…明明最近就忙到快死了...orz

Bootstrap Helper 與 Bootstrappers 開始支援 Rails 4

我寫的兩隻 gem bootstrap-helperboostrappers 目前都釋出 Rails4 版本了。

  • gem install bootstrap_helper -v 4.2.2.1
  • gem install bootstrappers -v 4.0.rc1

有任何問題,請回報到 Github 上的 issues 上。

Boostrappers 是針對我在 2013/03 月底測試 Rails 4.0.beta1 測出來的 solution 更換掉 gemset 的。目前應該是沒什麼大問題...

不過這次值得注意的是,Rails4 底層又換了不少 API,包括 generator 的 action 和 migration,所以為了 bnootstrappers 的升級,我被迫 release 了三隻 gem。

包括我之前寫的 AutoFacebook,也被迫出了一個 Rails4 版本。

  • gem install auto-facebook -v 0.1.rails4

Sublime Text 2 Packages for Rails

最近玩到一些在開發實務和日常工作上還滿實用的 Package,記錄下來也分享給可能有同樣需要的朋友。

PlainTasks


相當易用的 TODO List,配合適當的快捷鍵及設定,可以在 ST2 裡快速開啟並編輯.

簡單說明一下,他其實是開啟指定的文字檔,然後利用插件的快捷鍵和縮排來達到 New / Done / Cancel / Archive 的功能。

首先我在家目錄下建了一個叫 TODO 的空檔案,然後在 ST2 的 Key Bindings - User 裡增加這行

{ "keys": ["super+."], "command": "open_file", "args": {"file": "/Users/Unayung/TODO"} }

  1. ⌘ + . 可以呼叫 TODO List
  2. ":"結尾的字串會被視為標題
  3. ⌘ + Enter 增加TODO項目
  4. ⌘ + d 把項目設定為已完成 (打綠勾勾)
  5. ⌘ + m 把項目設定為已取消 (打紅叉叉)
  6. ⌘ + Shift + a 把已完成及已取消的所有項目都移到 Archive

如此一來就可以很方便的在日常寫 code 的環境下記錄各種 TODO 事項

ERB-Sublime-Snippets

有在寫 ERB 的話這個東西就很方便了,例如輸入 er 再按 tab 就會自動補成 <% %>,游標還幫你放在中間,多貼心
常用轉換對照

Rails Latest Migration

這東西是省去翻找最新一個 migration 檔案麻煩的 package,安裝完成之後只要叫出 Command Palette (⌘ + Shift + p) 然後輸入 last 他就會幫你開好最後一份 migration 檔。

Rails Related Files


這也是同樣幫助你在檔案之間移動的 package,他的作用是例如你在對 book.rb 動作,點滑鼠右鍵或是 ⌘ + Shift + o 會列出和目前這個檔有關連的檔案 ex. books_controller.rb, book相關的 views 等等

Simple Rails Navigator


MVC開發常常會在 model / view / controller 切來切去。有了這個 package 就可以很優雅(?)的在各種檔案間切換自如

  1. ⌘ + Ctrl + m 列出所有 model folder 裡的檔案
  2. ⌘ + Ctrl + v 列出所有 view folder 裡的檔案
  3. ⌘ + Ctrl + c 列出所有 controller folder 裡的檔案
  4. ⌘ + Ctrl + j 列出 assets/javascripts
  5. ⌘ + Ctrl + s 列出 assets/stylesheets

記得要加入以下的 Key Bindings 才會動

{ "keys": ["super+ctrl+m"], "command": "list_rails_models" },
{ "keys": ["super+ctrl+c"], "command": "list_rails_controllers" },
{ "keys": ["super+ctrl+v"], "command": "list_rails_views" },
{ "keys": ["super+ctrl+j"], "command": "list_rails_javascripts" },
{ "keys": ["super+ctrl+s"], "command": "list_rails_stylesheets" }

Emmet

強烈建議這個 Package 一定要裝,太好用了 !!

不管是開發什麼類型的 Website / Web Application 你都可能會需要 tr 裡有十個 td

這時你只要輸入 tr>td*10 按一下 tab

Done !! 還有更多 tricky 的使用方式請參考官網的介紹。

We will speak at RedDotRubyConf

Hi, we will attend RedDotRubyConf 2013 this year. ( 3 of our developers will fly to Singapore)

Also, our dev lead "xdite" will also give a speech about how to avoid write unsecure code.

Talk proposal:

Secure Your Application : The Basics

ecurity is hard. Everyone wants their sites to be hacker-free. But the truth is : if your sites got hacked, the causes are always the stupidest reasons you never aware, not the recent 0day exploits.During this talk I will show you

  • Common application design mistakes people usually maks but they don't even aware.

  • What's the most vulnerable controller actions cracker will seek?

  • What's the default security mechanism from Rails for these issues? Why you should not bypass them.

  • And how to write secure codes by default.

把公司 Log 搬到 Hipchat...

一直以來( 5-6 年前開始..),我都是用 IRC 在管團隊的 Log 和通知。

這個習慣最早以來是跟前輩學習來的。這在比較強悍的技術團隊內部,幾乎是行之有年的標準 Convention。

( 可見 Flickr 著名的 10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
投影片 (P.52),不過他們大概 2006 年就開始這樣做了,這篇只是後來比較漂亮的整理...)。

當年 在 T 客邦,也是用 redmine + IRC bot 自己搞了一套。

把 Log 都打到 IRC 有很多好處。團隊成員去開會、或者暫時離開。回到電腦前,還是可以很快速的掌握剛剛發生了什麼事。再加上 issue tracking 或者是 system alert 其實是很洗信箱讓人容易分神的東西,所以我們把這些幾乎都搬到 IRC 上,建立出一個可以非同步但又高效率的合作開發模式。

不過這個模式還是有一些極限,所以最近在 survey 過後,最近我決定把 公司 整套 solution 搬到 Hipchat 上。

主要搬家原因

  1. 發現每個同事一進來都要教怎麼用 irssi + 工作站掛 irc,學習成本很高
  2. 公司聊天室是 skype, log 在 irc 上,開兩窗有點麻煩。加上 skype-bot 不是不能作,只是我覺得 skype-bot 很吵…
  3. 人員離職很麻煩,因為要把 irc room 的 key 和 info 整套換掉,無法作權限控管
  4. demo 給別人看 irc solution 時也很麻煩,因為對方一定看得到我們的 key ....
  5. 對 irc 訊息上色要試很久,對一般的 developer 門檻有點高
  6. irc log 多半要切到桌機才能看,沒有 mobile solution。

所以最後就整套就搬到 Hipchat 了。看起來大家現在是用的蠻習慣的。

Hipchat 的好處

  1. 主要是 Web Based,但有 iOS, Android, Mac, Windows, Linux client
  2. 有 group 和 permission control,踢人加人很方便
  3. API 整合,寫 bot 很容易
  4. 聊天行為與一般 IRC chat 蠻相近的
  5. 貼圖貼檔案貼 Link 很方便
  6. 一樣會存歷史紀錄,就算離線了,重新上線還是可以找 Log
  7. 很多主流系統整合支援( github, redmine, capistrano, airbrake….)
  8. 5 人以下現在是免費的方案…

Hipchat integration

我們目前是把目前的幾種 Log 都打到 hipchat 上

  1. Github (github 的 hook 支援 hipchat, pull request, push , merge 都會通知...)
  2. Capistrano Deploy http://blog.hipchat.com/tag/capistrano/
  3. Airbrake ( server error 通知系統, airbrake 支援 hipchat )
  4. Redmine (官方的 hipchat/redmine_hipchat 不好用,所以我自己改了一隻 rocodev/redmine_hipchat 出來)

之後還會掛更多東西上去…