在线上开发环境下使用 rvm 安装 ruby,并且创建了该应用使用的 gemset
使用 capistrano/passenger 来进行启动/重启服务器,如何切换 gemset?
感觉没有啥好的方法来切换 gemset 啊
找到的 work around 的方法如下:
- 不使用专用的 gemset,而使用默认的 global gemset;
- 不使用 capistrano/passenger 来进行启动/重启服务器,在 deploy:publishing 之后加钩子,自己写启动命令;
- 改变 "[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm""的位置,将该语句放置在.bashrc 文件中(nonlogin bash 会加载.bashrc),
但是这样的话又会和 rvm1/capistrano3 有一定的冲突;(该方法感觉不纯洁了)
- 定制化启动 passenger, set :passenger_restart_command, "source $HOME/.bash_profile && cd #{release_path} && rvm use #{fetch(:rvm1_ruby_version)} && passenger-config restart-app" (该方法感觉也不纯洁了)
请问大家有啥方法没?
PS:使用 rvm1/capistrano3 可以保证在 bundle install 的时候,gem 的安装是正确的,可以安装到正确的 gemset 中(https://rvm.io/integration/capistrano文档的第一种方法)
个人感觉,rvm 和 capistrano 是本质上就冲突的,rvm 利用切换环境变量来使用 ruby 和 gemset,而 capistrano 是非登录 shell 的方式部署,本身就不会加载一些环境变量的 init 文件。