我正在寻找一种方法来安装 rvm,安装特定的 ruby 版本(使用 rvm)并将这个安装的 ruby 版本设置为默认值。在我可以安装 rvm 之前,我必须安装 gcc 和其他一些非常基本的软件包。到目前为止我已经尝试过:
1) 使用 net/ssh
- 我必须模拟一个伪 tty 才能 sudo 一些命令,到目前为止,我不知道如何从不成功的完整命令中区分成功的完整命令完成。
- 安装 rvm 后,我偶然发现了使用 rvm 的问题(“rvm 不是函数”,错误消息,导致无法设置默认的 ruby 版本)。
2) 使用 capistrano
在 ssh 输出中插入了换行符,例如每次都会在新行中打印一个进度条,取得一些进展。这是我可以忍受的。
rmv 也有同样的问题,我可以安装 rvm,但我无法设置默认值:
rvm --default use 1.9.2
例如。没有错误消息,但是当我稍后登录时,没有设置默认值并ruby -v
显示旧系统 ruby。
3) 使用 capistrano 和 rvm-capistrano
- 现在我遇到了问题,我在安装 rvm 之前尝试执行的那个任务失败了,因为似乎有一些魔法可以摆弄 shell 默认值:
* executing "sudo -p 'sudo password: ' yum install --assumeyes git gcc-c++ autoconf automake make patch zlib-devel libtool bzip2-devel" servers: ["ec2-54-247-142-214.eu-west-1.compute.amazonaws.com"] [ec2-54-247-142-214.eu-west-1.compute.amazonaws.com] executing command ** [out :: ec2-54-247-142-214.eu-west-1.compute.amazonaws.com] bash: /home/ec2-user/.rvm/bin/rvm-shell: No such file or directory command finished in 2094ms failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'default' -c 'sudo -p '\\''sudo password: '\\'' yum install --assumeyes git gcc-c++ autoconf automake make patch zlib-devel libtool bzip2-devel'" on ec2-54-247-142-214.eu-west-1.compute.amazonaws.com rake aborted!
这里我发出安装 rvm/ruby 的命令:
run 'curl -L https://get.rvm.io | bash -s stable'
run 'rvm install ruby-1.9.2-p320'
run 'echo "[[ -s \"\$HOME/.rvm/scripts/rvm\" ]] && source \"\$HOME/.rvm/scripts/rvm\"" >> .bashrc'
run 'rvm --default use ruby-1.9.2-p320'
run 'which ruby && ruby -v'
这里是作为响应发出的错误消息rvm --default use 1.9.2
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
You need to change your terminal settings to allow shell login.
Please visit https://rvm.io/workflow/screen/ for example.
4.1) 使用 capistrano 和 rvm-capistrano 并稍微修改一下
更新:在 RVM 聊天中 mpapis 的帮助下,我现在能够提出这个可行的解决方案:require "rvm/capistrano"
role :server, ENV[ 'base_image_setup_server' ] if ENV[ 'base_image_setup_server' ]
default_run_options[:pty] = true
default_run_options[:shell] = :bash
set :rvm_ruby_string, 'ruby-1.9.2-p320'
set :rvm_type, :user
def rvm_bin
'$HOME/.rvm/bin/rvm'
end
namespace :images do
task :install_basics do
run "#{sudo} yum install --assumeyes git gcc-c++ autoconf automake make patch zlib-devel libtool bzip2-devel"
run "#{sudo} yum update --assumeyes"
end
task :install_ruby do
rvm.install_rvm
rvm.install_ruby
run "#{rvm_bin} alias create default #{rvm_ruby_string}"
run 'echo "source ~/.rvm/environments/default" >> $HOME/.bashrc'
run 'which ruby && ruby -v'
end
...
desc 'build the base-image'
task :base_image do
install_basics
install_ruby
install_boost
install_rake_and_rack
install_sioux
test_sioux
end
主要区别在于,RVM不是作为函数使用,而是直接使用程序。
亲切的问候,托斯滕