傑克達與瑞兒絲的大小事

快速筆記整理網站開發上碰到的各種技巧和問題,免得年紀大忘光,至少還有一個地方可以查找

Category Archives: Rails 小技巧

設定 Capistrano deploy 保留的 release 數量

Capistrano 預設保留的數量是 5 個,但如果你想保留更少的話,可以這樣做

實作方式:

1. 開啟 capistrano 的 deploy.rb 設定檔,加上

set :keep_releases, 1

其中 1 表示你要保留的 release 數量

2. 設定在執行完 deploy 操作後,馬上清理 release,可在文件最後加上

after "deploy:update", "deploy:cleanup"

3. 另外你也可以透過 command line 下達指令來控制要保留的 release 數量,如下

bundle exec cap deploy:cleanup -s keep_releases=1

參考文章:

http://stackoverflow.com/questions/2121957/capistrano-clean-up-old-releases

http://geoff.evason.name/2009/03/27/setting-a-capistrano-variable-from-the-command-line/

Instance 變數的快取

學 Ruby 也有一段時間了,但一直忘記「 ||= 」這個指令的使用方式,還是快速筆記一下加強記憶吧

使用意義:

根據 Rails Casts 的影片說明,一般我們在 Ruby 執行

@user = User.find(1)

當下達這樣的指令時,Ruby 就會在背後執行一段 SQL 語法取得我們指定的資料,而收到一個 request 時可能需要執行很多次的這樣的操作,相對地也就會對 database 執行同樣多次的 SQL 查詢,是還滿秏效能的,這時,我們就可以使用 OR 符號,將剛剛的指令修正如下

@user ||= User.find(1)

第一次執行時,由於 @user 是 nil,所以 Ruby 便會生成 SQL 語法向 database 取得資料,一旦當 @user 有了資料,不再是 nil 值時,下次再執行這段指令,Ruby 就不會再生成 SQL 語向 database 取資料,而是直接返回 @user 變數值,如此一來就可以大大減少效能的損秏

簡單來記,就是當變數為空值時才執行指令的操作,否則返回變數保存的內容

參考文章:

http://railscasts.com/episodes/1-caching-with-instance-variables?view=asciicast

查詢遠端的 gem 檔

如果想要知道查詢目前有哪些 gem 檔可用,除了可以利用 The Ruby Toolbox 這個網站查找之外

可以透過 gem search -r 指令來找尋目前遠端上符合關鍵字的 gem 檔, 如:

$ gem search -r ckeditor

用 Ruby 生成隨機字串/數字

當專案需要不同位數的字串,數字或英數混合的隨機組合,可利用以下方式生成

執行方式:

require 'securerandom'
s = SecureRandom.urlsafe_base64(16)

生成結果:

5b5cd0da3121fc53b4bc84d0c8af2e81

SecureRandom 還有以下幾種生成方法:

  • base_64
  • hex
  • random_bytes
  • random_number

參考文章:

http://stackoverflow.com/questions/88311/how-best-to-generate-a-random-string-in-ruby