最近在五倍的 Rails 案子中碰到了使用 Capistrano 部屬中,bundle exec whenever
會一直出現 bundle: command not found
的問題,跟同事檢查了一陣子都找不到問題所在。
由於專案的需求,Ruby 的路徑是使用環境變數來設定,一般而言在其他 command 都能順利執行的情況下應該是不會出現這樣的問題,唯一能想到的就是可能在執行的時候沒有吃到自訂的環境變數,在 Capistrano 中是使用 set :default_env
來設定環境變數,在檢查程式碼的時候發現是 whenever 執行的過程中根本沒有去讀取自訂的環境變數
1 | set :whenever_command_environment_variables, ->{ { rails_env: fetch(:whenever_environment) } } |
其實這個問題的解決辦法也很簡單,就是把原本設定的環境變數加到 whenever_command_environment_variables
裡頭讓他在執行時可以吃到,關於這個部分我已經發了 PR 就看 owner 什麼時候想要解決,而短期的作法如下:
1 | set :whenever_command_environment_variables, -> { fetch(:default_env).merge!(rails_env: fetch(:whenever_environment)) } |
把以上這一段加入到 deploy.rb
中或是 stage 的設定檔中就可以了。
嗯,寫完了一篇費文呢✌️