【问题标题】:Respect rbenv when running commands over ssh通过 ssh 运行命令时尊重 rbenv
【发布时间】:2020-02-17 19:56:51
【问题描述】:

我有一个无头 Ubuntu 18.04 虚拟机,我在 rbenv 之上安装 Rails 应用程序。

我希望能够自动化一些管理操作,以便我可以在本地运行它们并让我的脚本通过 ssh 执行命令。但是,当我这样做时,我得到的是系统红宝石而不是 rbenv 红宝石。如果我直接 ssh 到盒子,那么我会得到正确的 rbenv ruby​​。

例子:

ubuntu:~$ cat show-ruby.sh
which ruby
ruby --version
ubuntu:~$ bash show-ruby.sh
/home/ubuntu/.rbenv/shims/ruby
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
laptop:~$ ssh ubuntu 'bash show-ruby.sh'
/usr/bin/ruby
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]

rbenv 在我的.bashrc 文件中初始化:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

所以我尝试将source ~/.bashrc 添加到我的show-ruby.sh 测试脚本的顶部,但这并没有什么不同。有什么想法可以强制我的远程执行脚本尊重我的 rbenv 安装的 ruby​​?

【问题讨论】:

    标签: ruby ssh rbenv


    【解决方案1】:

    只需添加一个带有所需 ruby​​ 版本的 .ruby-version 文件,rbenv 会自动设置 ruby​​ 版本

    [current] > cat .ruby-version
    2.4.6
    [current] > rbenv version
    2.4.6 (set by .ruby-version)
    

    【讨论】:

    • 问题是 rbenv 甚至没有被调用,这就是为什么它在/usr/bin/ruby返回系统红宝石
    【解决方案2】:

    rbenv 从安装在.bashrc 中的初始化触发。但是,该初始化仅发生在交互式 shell 中。您可以强制 bash shell 与 -i 标志交互:

    laptop:~$ ssh ubuntu 'bash -i show-ruby.sh'
    /home/ubuntu/.rbenv/shims/ruby
    ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
    

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2010-10-08
      • 2011-01-25
      相关资源
      最近更新 更多