ruby - 通过脚本设置带有rvm的EC2服务器

标签 ruby rvm capistrano rvm-capistrano

我正在寻找一种方法来安装rvm,安装特定的ruby版本(使用rvm)并将此安装的ruby版本设置为默认值。在安装 rvm 之前,我必须安装 gcc 和其他一些非常基本的软件包。到目前为止我尝试过的:

1) 使用net/ssh

  • 我必须模拟一个伪 tty 才能执行一些命令,到目前为止, 我不知道如何区分成功的完整命令完成和不成功的完整命令。
  • 安装 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 的帮助下,我现在能够想出这个可行的解决方案: 需要“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用作函数,而是直接用作程序。

亲切的问候, 托斯顿

最佳答案

检查 RVM 站点是否有 Capistrano 集成 https://rvm.io/integration/capistrano

有安装 RVM 和 Ruby 的任务:

after 'deploy:setup', 'ubuntu:install'
after 'deploy:setup', 'rvm:install_rvm' # do it only with deploy setup
before 'deploy', 'rvm:install_ruby'     # do it on every deploy
namespace :ubuntu do
  desc "setup ubuntu system"
  task :install do
    run "apt-get install -y make ...", :shell => "sh"
    ...
  end
end

然后你运行标准:

cap deploy:setup
cap deploy:cold

此外,您可能想查看我的示例 Rails 应用程序,以获取简单且有效的部署脚本:https://github.com/mpapis/ad以及我关于它的博客文章:http://niczsoft.com/2012/03/fast-deployment-using-capistrano-rvm-and-more/

关于ruby - 通过脚本设置带有rvm的EC2服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940571/

相关文章:

ruby-on-rails - Capistrano 3 在 Ubuntu 12.04 LTS 上部署时出错

ruby-on-rails - 从自定义 Controller Rails 向模型插入数据

ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB?

Ruby 正则表达式匹配帮助

ruby - 在 Ubuntu 中全新安装 RVM 不允许我安装 gems(zlib 错误)

ruby - 你如何激活或设置默认的佣金?

Ruby:自动加载方法有什么作用?

ruby - RVM 不适用于 1.9.1 但适用于 1.8.6 和 1.8.7

ruby-on-rails - Capistrano & Bash : ignore command exit status

ruby-on-rails - 如何为部署设置服务器并使用 Capistrano 进行冷部署?