沒穿方服

索引

顯示╱隱藏內文
顯示具有 ruby 標籤的文章。 顯示所有文章
顯示具有 ruby 標籤的文章。 顯示所有文章

團隊在 rails console 用了 ap 來顯示每個指令的執行結果,有好有壞,缺點之一是遇上層層包疊的類別,又沒有特別處理 inspect 方法時,會直接輸出大段文字,格式難看,干擾開發。

其實 ap 會對特定類別調整顯示,例如 ActiveRecord::Base 物件會被顯示為 attributes 的 hash,但想自訂其他規則的話,目前還沒有簡單方法。

最後用了 monkey patch 達成,對想改的類別逐一動手,暫時夠用了。 我改的是 PG::ResultReform::FormTrailblazer::Operation 三個類別,見 gist,放到 Rails 專案的 config/initializers/ 下面。

例子,PG::Result 物件

調整前,顯示的是 inspect 結果,加上 raw 選項會漂亮一些,但資訊不算有用。 調整前

調整後,模仿 AR 顯示查詢出來的記錄。 另外如果有裝 table_print,可以選擇輸出 table 格式。 調整後

目前 redis db 我們只用在 rails 頁面快取用途,用過的管理工具僅 telnet。 常做的是 MONITOR 看存取狀況,為什麼行為不如預期, 然後基本的 DEL 把舊值砍掉而已。

Telnet 互動輕快,monitor 的即時性也很方便,不過每次連進去下 monitor 有點麻煩, 而且 SET 系指令會噴大塊字串(顯示寫入的值)洗畫面,太噁心了。

於是寫了個 rails 的 wrapper script, 依賴 redis-rb,且需要某處有 config/redis.yml 寫好連線用的參數
→ 簡易 redis client: scripts/redis-client — Gist

啟動方式

  • 連到 production → ./script/redis-client production
  • 連到 staging,且只顯示 key 開頭為 "staging" 的存取 → ./script/redis-client staging -f \\A\"staging

功能

  • 直接進入 monitor 狀態,可以輸入 m 暫停/繼續 monitor 的輸出。
  • 命令列選項 -f pattern(或 --key-filter=pattern)指定只 monitor 符合的 key,不符就不顯示(只影響 SET、GET 等有 key 的指令)。
  • del 接受 pattern,例如 del *foo*(pattern 會傳給 redis KEYS 指令)。
  • grep 指令,例如 grep foo\\d+(對 KEYS 結果作 ruby grep,這裡 pattern 是 ruby 的 Regexp)。
  • 部分輸出有 pretty print,另 SET、SETEX 不顯示寫入的值(而是值的長度)以節省畫面空間。
連到 staging,Flush All

License: public domain.