部署 请教 Rails + Passenger + Capistrano 部署

flybee · 2018年10月06日 · 最后由 pynix 回复于 2018年10月06日 · 182 次阅读

在线上开发环境下使用rvm安装ruby,并且创建了该应用使用的gemset 使用capistrano/passenger来进行启动/重启服务器,如何切换gemset? 感觉没有啥好的方法来切换gemset啊

找到的work around的方法如下:

  1. 不使用专用的gemset,而使用默认的global gemset;
  2. 不使用capistrano/passenger来进行启动/重启服务器,在deploy:publishing之后加钩子,自己写启动命令;
  3. 改变 "[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm""的位置,将该语句放置在.bashrc文件中(nonlogin bash会加载.bashrc), 但是这样的话又会和rvm1/capistrano3有一定的冲突;(该方法感觉不纯洁了)
  4. 定制化启动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文件。

共收到 3 条回复
  1. 如果要看一个教程,我推荐 https://gorails.com/deploy/ubuntu/ ,这是我所知唯一能持续更新维护良好的教程。
  2. gemset 已经被 bundler 替代,可以弃用。我认为安装系统源里的 ruby 比用 rvm/rbenv 的更好管理,后两者经常要处理不同环境和工具的 PATH 的问题。
Rei 回复

是的,我感觉也是,在线上环境下使用gemset来管理ruby gem非常不方便,出了在自己的个人电脑上还行。推荐的文档不错!

中年程序员rails app部署之道。https://ruby-china.org/topics/36865

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册