如何使用 pry 作為 Ruby debugger 進行除錯

很奇怪,ruby-debug 或是 ruby-debug19 常常有版本問題,甚至還有 fork 版本 debugger。都不知道哪個沒問題。

最近發現其實 pry gem 就可以作為 debugger 之用,本來還以為只是漂亮的 irb 取代品,沒想到功能這麼強大。作為 debugger 使用的方法很簡單,只要在程式裡加上:

binding.pry

這樣就會設下中斷點。例如在 rails console 或 rails server 中,就會停下來讓你可以進行檢查和除錯。

可是如果你有用 Rails 伺服器,例如 pow 或 passenger 的話,因為不在同一個 process,所以必須加裝 pry-remote gem。它利用 DRb 技巧讓另一個 process 可以亂入進行除錯,用法改成:

binging.remote_pry

接著在 command line 輸入 pry-remote 就可以進行除錯了。非常簡單好用。

其他 pry plugins 也可以裝一下,包括:1. pry-stack_explorer 輸入 show-stack 的話可以看到 call stack 2. pry-debugger 可以加上 step, next, finish 和 continue 的控制

A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩 投影片

這是今年在 OSDC.TW 演講的投影片。這次的內容相對簡單,就分享一個好用的工具給大家。會挑這個題目並不是因為自己對 Vagrant/Chef 非常熟很有研究(我們公司的 DevOps 當然比我厲害)。而是從一個 Rubyist 的角度想說 Ruby 社群裡有什麼好東西可以介紹給大家。畢竟 OSDC.TW 並不是以特定技術為主的研討會,來聽的人四面八方,所以從去年開始我就盡量考慮聽眾適合聽的程度,以後大概也會抱持這樣的想法吧。

Faria 徵才啟事

2012/4/24: 已收滿,感激。

敝社正在徵 Ruby on Rails Developer,公司環境跟獲利情形非常不錯,待遇優渥。職位說明請參考 Job Description

Faria Systems 是一家以 IB(International Baccalaureate) 國際學校為客戶的 Software as a Service 軟體公司,全球超過九十個不同國家、一千兩百所國際學校使用我們的產品。今年在台北新設立公司總部,正在擴大招募 Ruby on Rails developer 和 Frond-end web developer。

附上一張公司同事正在進行 pair programming 的照片:

Sublime Text 資源整理

自從 Textmate 2 官方開發陣亡之後,就改用 Sublime Text 2 來寫 code 了。整理一些找到的好資料跟 Plugins:

Plugins

Syntax 相關

Settings

// 把 tab 換空白
"translate_tabs_to_spaces": true,

// 高亮所在行
"highlight_line": true,

// 存檔時移除多餘的空白
"trim_trailing_white_space_on_save": true,

還有推薦什麼必裝的 Plugins 嗎?

修改 AWS RDS 資料庫設定,以 max_allowed_packet 為例

記錄一下,以後肯定還會再用到。

因為 MySQL 預設的 max_allowed_packet 設定是 1M,對有些應用來說可能太小了。如果是自己架 MySQL 改 /etc/mysql/my.cnf 就是了,不過租用 Amazon RDS 就沒有這種事了。又它的 web console 也沒有提供介面可以改設定(parameters)除了可以用 AWS 的 web console 介面來改,也可以透過 Amazon RDS Command Line Toolkit 呼叫 API 來改,步驟如下:

  1. 下載 Amazon RDS Command Line Toolkit

  2. 參考 credential-file-path.template,編輯 credentials.txt 把 AWSAccessKeyId 和 AWSSecretKey 填上去

  3. 設定環境變數,例如:
    export AWS_RDS_HOME=/Users/ihower/RDSCli-1.12.001
    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
    export PATH=/Users/ihower/RDSCli-1.12.001/bin:$PATH
    export AWS_CREDENTIAL_FILE=$AWS_RDS_HOME/credentials.txt
    export EC2_REGION=ap-northeast-1

  4. chmod +x ${AWS_RDS_HOME}/bin/*

  5. rds-create-db-parameter-group <自定的parameters群組名稱> -d "群組描述" -f MySQL5.5 新增一個群組來放參數

  6. rds-modify-db-parameter-group <自定的parameters的群組名稱> -p "name=max_allowed_packet,value=2097152,method=immediate" 把參數放進你自定的群組裡 (這裡單位只能用bytes)

  7. rds-modify-db-instance <DB Instance Name> -g <自定的parameters群組名稱> 把群組綁到指定的 DB 上

  8. 這個設定似乎不需要 reboot 就生效了。要重開的話,在 web console 也可以 reboot。

完整的文件在 AWS Command Line Reference,例如


rds-describe-db-instances <DB Instance Name> 看這個 DB 套用了什麼 PARAMGRP 群組
rds-describe-db-parameters <自定的parameters的群組名稱> 看這個群組的 parameters

A brief introduction to SPDY – 邁向 HTTP/2.0 – 投影片

這是這次在 WebConf Taiwan 演講的投影片。從接到演講邀請就想說講什麼題目最切題,雖然自己比較熟的是 Rails,但是好像從前年開始就沒有在公開的場合講 Rails 了(咦?) anyway,這次一開始投的是「如何善用 REST 和 Hypermedia 設計 Web APIs」,後來看 SPDY 覺得這更實用且影響更大,更值得介紹給大家。加上我自己之前看 HTTP 連線管理 就覺得這議題蠻有趣的。REST 只是一種設計風格,而 HTTP 可是大家賴以為生的通訊協定啊,所以就毅然決然決定來改題目…

會後似乎獲得了不錯的回響,看來很多人都是第一次認識 SPDY 啊,題目真是挑對了 XD