1. bundle binstubs

在Ruby中我們可以使用Bundler來管理專案的套件和版本,為了確保執行rake等指令時,能使用Gemfile一致的設定,我們通常會使用bundle exec作為開頭來執行指令,例如:

$ bundle exec rake db:migrate

不過每次都要打bundle exec顯得有些麻煩,這時候我們可以利用bundle的binstubs來解決這問題。

例如我們想產生rake的binstubs,輸入

$ bundle binstubs rake

會在專案下的bin資料夾產生rake的script,這時候執行

$ ./bin/rake

就相當於

$ bundle exec rake

如果想產生全部binstubs,可以執行

$ bundle install --binstubs

不過不建議這樣做,他會在該目錄下產生.bundler的設定值,之後只要執行bundle install都會重新產生binstubs,如果有使用spring之類的套件會被覆蓋掉。

2. 環境變數

產生了binstubs之後還是要多打./bin/的路徑,這時候我們可以將相對路徑./bin加到環境變數來解決,以Mac為例可以修改.bash_profile,

$ vi ~/.bash_profile

加入

export PATH="./bin:$PATH"

之後在有產生binstubs的專案下就可以直接執行rake指令了,必須加在最前面讓他優先被找到。

3. direnv

如果有使用rvm的版本管理系統,直接加入環境變數會被覆蓋掉,我門可以利用direnv的程式來幫我們針對資料夾設定自己的環境變數。首先利用brew安裝:

$ brew install direnv

接著加入以下設定到.bash_profile

eval "$(direnv hook bash)"

接著在專案資料夾下增加.envrc的檔案,寫入

PATH_add bin

之後進入這個資料夾就會套用這個環境變數,第一次進入可能會看到錯誤訊息:

direnv: error .envrc is blocked. Run `direnv allow` to approve its content.

依據他的提示輸入

$ direnv allow

允許它套用環境變數。

相关文章