顯示具有 Ruby 標籤的文章。 顯示所有文章
顯示具有 Ruby 標籤的文章。 顯示所有文章

2019/02/18

Ruby 語法一些不太喜歡的地方

最近學 Ruby 看到一些特性,讓我覺得有點毛毛的,像是 Ruby 的 function call syntax:
list = [0, 1, 2, 3, 4]

list.count()

# 寫可以這樣寫
list.count

count() 還算好,如果是 fetch() 就有趣了:
list.fetch(3)  # 3

# 刮號可以省略
list.fetch 3  # 3

不否認這種特性可以工程師提高開發效率,算是 syntax sugar 吧?但是若沒有一致的 coding srandard,可能會讓整個專案的程式碼變的雜亂不容易閱讀,這樣就變成「syntax salt」了。

list = [1, 2, 3]

# 這個應該沒什麼問題
list.fetch(1) + 5  # 7

# 這個就很容易誤會了
list.fetch 1 + 5  # IndexError




感謝 @david50407 提供 Ruby Style Guide

2016/07/16

Redmine booting up with Thin

以前在 FreeBSD 上找不到什麼比較好的 Redmine 啟動方法,當時找到最好的解法是在 Nginx 上面安裝 Passenger 將 Request 轉給 Redmine 執行。

但 passenger 需要在 compile time 手動將 module 編譯進去,若遇到 Nginx 版本更新,還要在手動為了 passenger 設定一次,實在很麻煩。

後來終於找到比較簡單的方法,就是在 Redmine 的 GemFile 加上「Thin」:
gem "rails", "4.2.5.2"
gem "jquery-rails", "~> 3.1.4"
gem "coderay", "~> 1.1.0"
gem "builder", ">= 3.0.4"
....
gem "roadie-rails"
gem "thin"

之後 bundler 安裝時就會自動把對應的 thin 版本拉下來。再來執行「thin config -C config.yml」便會建立一個預設的設定檔:
---
chdir: /home/zeroplex/redmine
environment: development
address: 0.0.0.0
port: 3000
timeout: 30
log: /home/zeroplex/redmine/log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
threadpool_size: 20
daemonize: true

將設定檔的「chdir」設定成 Remine 跟目錄,再來執行「thin start -C config.yml」就能把 Redmine 跑起來了。

若機器上只有 thin 在跑 web server,那就讓他處理外部連線就好。若原本就有其他 web server 像是 Nginx 之類的,可以參考官網說明,設定 proxy 在 web server 把 request 轉給 thin。

2015/03/30

Install Gems without Docs

使用 gems install 時,預設會下載並產生 gem 說明文件,但這個步驟會花掉不少時間。

若環境為 production,說明文件其實是沒有必要安裝的,可以在家目錄下新增 .gemrc 檔,要求安裝 gems 時忽略說明文件:
cd ~
echo 'gem: --no-rdoc --no-ri' > .gemrc