• Ruby环境配置


    一、rvm

    1、简介

    rvm是一个命令行工具,可以提供一个便捷的多版本ruby环境的管理和切换。

    2、安装步骤

    1、新建文件:rvm-installer.sh

    vi rvm-installer.sh

    内容如下

    #!/usr/bin/env bash
    
    shopt -s extglob
    set -o errtrace
    set -o errexit
    
    rvm_install_initialize()
    {
      DEFAULT_SOURCES=(github.com/rvm/rvm bitbucket.org/mpapis/rvm)
    
      BASH_MIN_VERSION="3.2.25"
      if
        [[ -n "${BASH_VERSION:-}" &&
          "$(printf "%b" "${BASH_VERSION:-}
    ${BASH_MIN_VERSION}
    " | LC_ALL=C sort -t"." -k1,1n -k2,2n -k3,3n | head -n1)" != "${BASH_MIN_VERSION}"
        ]]
      then
        echo "BASH ${BASH_MIN_VERSION} required (you have $BASH_VERSION)"
        exit 1
      fi
    
      export HOME PS4
      export rvm_trace_flag rvm_debug_flag rvm_user_install_flag rvm_ignore_rvmrc rvm_prefix rvm_path
    
      PS4="+ ${BASH_SOURCE##${rvm_path:-}} : ${FUNCNAME[0]:+${FUNCNAME[0]}()}  ${LINENO} > "
    }
    
    log()  { printf "%b
    " "$*"; }
    debug(){ [[ ${rvm_debug_flag:-0} -eq 0 ]] || printf "%b
    " "Running($#): $*"; }
    fail() { log "
    ERROR: $*
    " ; exit 1 ; }
    
    rvm_install_commands_setup()
    {
      which which >/dev/null 2>&1 || fail "Could not find 'which' command, make sure it's available first before continuing installation."
      if
        [[ -z "${rvm_tar_command:-}" ]] && builtin command -v gtar >/dev/null
      then
        rvm_tar_command=gtar
      elif
        ${rvm_tar_command:-tar} --help 2>&1 | GREP_OPTIONS="" grep -- --strip-components >/dev/null
      then
        rvm_tar_command="${rvm_tar_command:-tar}"
      else
        case "$(uname)" in
          (OpenBSD)
            log "Trying to install GNU version of tar, might require sudo password"
            if (( UID ))
            then sudo pkg_add -z gtar-1
            else pkg_add -z gtar-1
            fi
            rvm_tar_command=gtar
            ;;
          (Darwin|FreeBSD|DragonFly) # it's not possible to autodetect on OSX, the help/man does not mention all flags
            rvm_tar_command=tar
            ;;
          (SunOS)
            case "$(uname -r)" in
              (5.10)
                log "Trying to install GNU version of tar, might require sudo password"
                if (( UID ))
                then
                  if which sudo >/dev/null 2>&1
                  then sudo_10=sudo
                  elif which /opt/csw/bin/sudo >/dev/null 2>&1
                  then sudo_10=/opt/csw/bin/sudo
                  else fail "sudo is required but not found. You may install sudo from OpenCSW repository (http://opencsw.org/about)"
                  fi
                  pkginfo -q CSWpkgutil || $sudo_10 pkgadd -a $rvm_path/config/solaris/noask -d http://get.opencsw.org/now CSWpkgutil
                  sudo /opt/csw/bin/pkgutil -iy CSWgtar -t http://mirror.opencsw.org/opencsw/unstable
                else
                  pkginfo -q CSWpkgutil || pkgadd -a $rvm_path/config/solaris/noask -d http://get.opencsw.org/now CSWpkgutil
                  /opt/csw/bin/pkgutil -iy CSWgtar -t http://mirror.opencsw.org/opencsw/unstable
                fi
                rvm_tar_command=/opt/csw/bin/gtar
                ;;
              (*)
                rvm_tar_command=tar
                ;;
            esac
        esac
        builtin command -v ${rvm_tar_command:-gtar} >/dev/null ||
        fail "Could not find GNU compatible version of 'tar' command, make sure it's available first before continuing installation."
      fi
      if
        [[ " ${rvm_tar_options:-} " != *" --no-same-owner "*  ]] &&
        $rvm_tar_command --help 2>&1 | GREP_OPTIONS="" grep -- --no-same-owner >/dev/null
      then
        rvm_tar_options="${rvm_tar_options:-}${rvm_tar_options:+ }--no-same-owner"
      fi
    }
    
    usage()
    {
      printf "%b" "
    
    Usage
    
      rvm-installer [options] [action]
    
    Options
    
      [[--]version] <version>
    
        The version or tag to install. Valid values are:
    
          latest         - The latest tagged version.
          latest-minor   - The latest minor version of the current major version.
          latest-<x>     - The latest minor version of version x.
          latest-<x>.<y> - The latest patch version of version x.y.
          <x>.<y>.<z>    - Major version x, minor version y and patch z.
    
      [--]branch <branch>
    
        The name of the branch from which RVM is installed. This option can be used
        with the following formats for <branch>:
    
          <account>/
    
            If account is wayneeseguin or mpapis, installs from one of the following:
    
              https://github.com/rvm/rvm/archive/master.tar.gz
              https://bitbucket.org/mpapis/rvm/get/master.tar.gz
    
           Otherwise, installs from:
    
             https://github.com/<account>/rvm/archive/master.tar.gz
    
          <account>/<branch>
    
            If account is wayneeseguin or mpapis, installs from one of the following:
    
              https://github.com/rvm/rvm/archive/<branch>.tar.gz
              https://bitbucket.org/mpapis/rvm/get/<branch>.tar.gz
    
            Otherwise, installs from:
    
              https://github.com/<account>/rvm/archive/<branch>.tar.gz
    
          [/]<branch>
    
            Installs the branch from one of the following:
    
              https://github.com/rvm/rvm/archive/<branch>.tar.gz
              https://bitbucket.org/mpapis/rvm/get/<branch>.tar.gz
    
          [--]source <source>
    
            Defines the repository from which RVM is retrieved and installed in the format:
    
              <domain>/<account>/<repo>
    
            Where:
    
              <domain>  - Is bitbucket.org, github.com or a github enterprise site serving
                          an RVM repository.
              <account> - Is the user account in which the RVM repository resides.
              <repo>    - Is the name of the RVM repository.
    
            Note that when using the [--]source option, one should only use the [/]branch format
            with the [--]branch option. Failure to do so will result in undefined behavior.
    
          --trace
    
            Provides debug logging for the installation script.
    Actions
    
      master - Installs RVM from the master branch at rvm/rvm on github or mpapis/rvm
               on bitbucket.org.
      stable - Installs RVM from the stable branch a rvm/rvm on github or mpapis/rvm
               on bitbucket.org.
      help   - Displays this output.
    
    "
    }
    
    ## duplication marker 32fosjfjsznkjneuera48jae
    __rvm_curl_output_control()
    {
      if
        (( ${rvm_quiet_curl_flag:-0} == 1 ))
      then
        __flags+=( "--silent" "--show-error" )
      elif
        [[ " $*" == *" -s"* || " $*" == *" --silent"* ]]
      then
        # make sure --show-error is used with --silent
        [[ " $*" == *" -S"* || " $*" == *" -sS"* || " $*" == *" --show-error"* ]] ||
        {
          __flags+=( "--show-error" )
        }
      fi
    }
    
    ## duplication marker 32fosjfjsznkjneuera48jae
    # -S is automatically added to -s
    __rvm_curl()
    (
      __rvm_which curl >/dev/null ||
      {
        rvm_error "RVM requires 'curl'. Install 'curl' first and try again."
        return 200
      }
    
      typeset -a __flags
      __flags=( --fail --location --max-redirs 10 )
    
      [[ "$*" == *"--max-time"* ]] ||
      [[ "$*" == *"--connect-timeout"* ]] ||
        __flags+=( --connect-timeout 30 --retry-delay 2 --retry 3 )
    
      if [[ -n "${rvm_proxy:-}" ]]
      then __flags+=( --proxy "${rvm_proxy:-}" )
      fi
    
      __rvm_curl_output_control
    
      unset curl
      __rvm_debug_command curl "${__flags[@]}" "$@" || return $?
    )
    
    rvm_error()  { printf "ERROR: %b
    " "$*"; }
    __rvm_which(){   which "$@" || return $?; true; }
    __rvm_debug_command()
    {
      debug "Running($#): $*"
      "$@" || return $?
      true
    }
    rvm_is_a_shell_function()
    {
      [[ -t 0 && -t 1 ]] || return $?
      return ${rvm_is_not_a_shell_function:-0}
    }
    
    # Searches the tags for the highest available version matching a given pattern.
    # fetch_version (github.com/rvm/rvm bitbucket.org/mpapis/rvm) 1.10. -> 1.10.3
    # fetch_version (github.com/rvm/rvm bitbucket.org/mpapis/rvm) 1.10. -> 1.10.3
    # fetch_version (github.com/rvm/rvm bitbucket.org/mpapis/rvm) 1.    -> 1.11.0
    # fetch_version (github.com/rvm/rvm bitbucket.org/mpapis/rvm) ""    -> 2.0.1
    fetch_version()
    {
      typeset _account _domain _pattern _repo _sources _values _version
      _sources=(${!1})
      _pattern=$2
      for _source in "${_sources[@]}"
      do
        IFS='/' read -r _domain _account _repo <<< "${_source}"
        _version="$(
          fetch_versions ${_domain} ${_account} ${_repo} |
          GREP_OPTIONS="" grep "^${_pattern:-}" | tail -n 1
        )"
        if
          [[ -n ${_version} ]]
        then
          echo "${_version}"
          return 0
        fi
      done
    }
    
    # Returns a sorted list of all version tags from a repository
    fetch_versions()
    {
      typeset _account _domain _repo _url
      _domain=$1
      _account=$2
      _repo=$3
      case ${_domain} in
        (bitbucket.org)
          _url=https://${_domain}/api/1.0/repositories/${_account}/${_repo}/branches-tags
          ;;
        (github.com)
          _url=https://api.${_domain}/repos/${_account}/${_repo}/tags
          ;;
    
        (*)
          _url=https://${_domain}/api/v3/repos/${_account}/${_repo}/tags
          ;;
      esac
      __rvm_curl -s ${_url} |
        awk -v RS=',' -v FS='"' '$2=="name"{print $4}' |
        sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n
    }
    
    install_release()
    {
      typeset _source _sources _url _version _verify_pgp
      _sources=(${!1})
      _version=$2
      debug "Downloading RVM version ${_version}"
      for _source in "${_sources[@]}"
      do
        case ${_source} in
          (bitbucket.org*)
            _url="https://${_source}/get/${_version}.tar.gz"
            _verify_pgp="https://${_source}/downloads/${_version}.tar.gz.asc"
            ;;
          (*)
            _url="https://${_source}/archive/${_version}.tar.gz"
            _verify_pgp="https://${_source}/releases/download/${_version}/${_version}.tar.gz.asc"
            ;;
        esac
        get_and_unpack "${_url}" "rvm-${_version}.tgz" "$_verify_pgp" && return
      done
      return $?
    }
    
    install_head()
    {
      typeset _branch _source _sources _url
      _sources=(${!1})
      _branch=$2
      debug "Selected RVM branch ${_branch}"
      for _source in "${_sources[@]}"
      do
        case ${_source} in
          (bitbucket.org*)
            _url=https://${_source}/get/${_branch}.tar.gz
            ;;
          (*)
            _url=https://${_source}/archive/${_branch}.tar.gz
            ;;
        esac
        get_and_unpack "${_url}" "rvm-${_branch////_}.tgz" && return
      done
      return $?
    }
    
    # duplication marker dfkjdjngdfjngjcszncv
    # Drop in cd which _doesn't_ respect cdpath
    __rvm_cd()
    {
      typeset old_cdpath ret
      ret=0
      old_cdpath="${CDPATH}"
      CDPATH="."
      chpwd_functions="" builtin cd "$@" || ret=$?
      CDPATH="${old_cdpath}"
      return $ret
    }
    
    get_package()
    {
      typeset _url _file
      _url="$1"
      _file="$2"
      log "Downloading ${_url}"
      __rvm_curl -sS ${_url} -o ${rvm_archives_path}/${_file} ||
      {
        _return=$?
        case $_return in
          # duplication marker lfdgzkngdkjvnfjknkjvcnbjkncvjxbn
          (60)
            log "
    Could not download '${_url}', you can read more about it here:
    https://rvm.io/support/fixing-broken-ssl-certificates/
    To continue in insecure mode run 'echo insecure >> ~/.curlrc'.
    "
            ;;
          # duplication marker lfdgzkngdkjvnfjknkjvcnbjkncvjxbn
          (77)
            log "
    It looks like you have old certificates, you can read more about it here:
    https://rvm.io/support/fixing-broken-ssl-certificates/
    "
            ;;
          # duplication marker lfdgzkngdkjvnfjknkjvcnbjkncvjxbn
          (141)
            log "
    Curl returned 141 - it is result of a segfault which means it's Curls fault.
    Try again and if it crashes more than a couple of times you either need to
    reinstall Curl or consult with your distribution manual and contact support.
    "
            ;;
          (*)
            log "
    Could not download '${_url}'.
      curl returned status '$_return'.
    "
            ;;
        esac
        return $_return
      }
    }
    
    # duplication marker flnglfdjkngjndkfjhsbdjgfghdsgfklgg
    rvm_install_gpg_setup()
    {
      export rvm_gpg_command
      {
        rvm_gpg_command="$( which gpg2 2>/dev/null )" &&
        [[ ${rvm_gpg_command} != "/cygdrive/"* ]]
      } ||
        rvm_gpg_command="$( which gpg 2>/dev/null )" ||
        rvm_gpg_command=""
      debug "Detected GPG program: '$rvm_gpg_command'"
      [[ -n "$rvm_gpg_command" ]] || return $?
    }
    
    # duplication marker rdjgndfnghdfnhgfdhbghdbfhgbfdhbn
    verify_package_pgp()
    {
      if
        "${rvm_gpg_command}" --verify "$2" "$1"
      then
        log "GPG verified '$1'"
      else
        typeset _ret=$?
        log "
    Warning, RVM 1.26.0 introduces signed releases and 
    automated check of signatures when GPG software found.
    Assuming you trust Michal Papis import the mpapis public 
    key (downloading the signatures).
    
    GPG signature verification failed for '$1' - '$3'!
    try downloading the signatures:
    
        ${SUDO_USER:+sudo }${rvm_gpg_command##*/} --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
    
    or if it fails:
    
        command curl -sSL https://rvm.io/mpapis.asc | ${SUDO_USER:+sudo }${rvm_gpg_command##*/} --import -
    
    the key can be compared with:
    
        https://rvm.io/mpapis.asc
        https://keybase.io/mpapis
    "
        exit $_ret
      fi
    }
    
    verify_pgp()
    {
      [[ -n "${1:-}" ]] ||
      {
        debug "No PGP url given, skipping."
        return 0
      }
    
      get_package "$1" "$2.asc" ||
      {
        debug "PGP url given but does not exist: '$1'"
        return 0
      }
    
      rvm_install_gpg_setup ||
      {
        log "Found PGP signature at: '$1',
    but no GPG software exists to validate it, skipping."
        return 0
      }
    
      verify_package_pgp "${rvm_archives_path}/$2" "${rvm_archives_path}/$2.asc" "$1"
    }
    
    get_and_unpack()
    {
      typeset _url _file _patern _return _verify_pgp
      _url="$1"
      _file="$2"
      _verify_pgp="$3"
    
      get_package "$_url" "$_file" || return $?
      verify_pgp "$_verify_pgp" "$_file" || return $?
    
      [[ -d "${rvm_src_path}/rvm" ]] || mkdir -p "${rvm_src_path}/rvm"
      __rvm_cd "${rvm_src_path}/rvm" ||
      {
        _return=$?
        log "Could not change directory '${rvm_src_path}/rvm'."
        return $_return
      }
    
      rm -rf ${rvm_src_path}/rvm/*
      __rvm_debug_command $rvm_tar_command xzf ${rvm_archives_path}/${_file} ${rvm_tar_options:-} --strip-components 1 ||
      {
        _return=$?
        log "Could not extract RVM sources."
        return $_return
      }
    }
    
    rvm_install_default_settings()
    {
      # Tracing, if asked for.
      if
        [[ "$*" == *--trace* ]] || (( ${rvm_trace_flag:-0} > 0 ))
      then
        set -o xtrace
        rvm_trace_flag=1
      fi
    
      # Variable initialization, remove trailing slashes if they exist on HOME
      true 
        ${rvm_trace_flag:=0} ${rvm_debug_flag:=0}
        ${rvm_ignore_rvmrc:=0} HOME="${HOME%%+(/)}"
    
      if
        (( rvm_ignore_rvmrc == 0 ))
      then
        for rvmrc in /etc/rvmrc "$HOME/.rvmrc"
        do
          if
            [[ -s "$rvmrc" ]]
          then
            if
              GREP_OPTIONS="" grep '^s*rvm .*$' "$rvmrc" >/dev/null 2>&1
            then
              printf "%b" "
      Error: $rvmrc is for rvm settings only.
      rvm CLI may NOT be called from within $rvmrc.
      Skipping the loading of $rvmrc
      "
              exit 1
            else
              source "$rvmrc"
            fi
          fi
        done
      fi
    
      if
        [[ -z "${rvm_path:-}" ]]
      then
        if
          (( UID == 0 ))
        then
          rvm_user_install_flag=0
          rvm_prefix="/usr/local"
          rvm_path="${rvm_prefix}/rvm"
        else
          rvm_user_install_flag=1
          rvm_prefix="$HOME"
          rvm_path="${rvm_prefix}/.rvm"
        fi
      fi
      if [[ -z "${rvm_prefix}" ]]
      then rvm_prefix=$( dirname $rvm_path )
      fi
    
      # duplication marker kkdfkgnjfndgjkndfjkgnkfjdgn
      [[ -n "${rvm_user_install_flag:-}" ]] ||
      case "$rvm_path" in
        (/usr/local/rvm)         rvm_user_install_flag=0 ;;
        ($HOME/*|/${USER// /_}*) rvm_user_install_flag=1 ;;
        (*)                      rvm_user_install_flag=0 ;;
      esac
    }
    
    rvm_install_parse_params()
    {
      install_rubies=()
      install_gems=()
      flags=( ./scripts/install )
      forwarded_flags=()
      while
        (( $# > 0 ))
      do
        token="$1"
        shift
        case "$token" in
    
          (--trace)
            set -o xtrace
            rvm_trace_flag=1
            flags=( -x "${flags[@]}" "$token" )
            forwarded_flags+=( "$token" )
            ;;
    
          (--debug|--quiet-curl)
            flags+=( "$token" )
            forwarded_flags+=( "$token" )
            token=${token#--}
            token=${token//-/_}
            export "rvm_${token}_flag"=1
            printf "%b" "Turning on ${token/_/ } mode.
    "
            ;;
    
          (--path)
            if [[ -n "${1:-}" ]]
            then
              rvm_path="$1"
              shift
            else
              fail "--path must be followed by a path."
            fi
            ;;
    
          (--branch|branch) # Install RVM from a given branch
            if [[ -n "${1:-}" ]]
            then
              case "$1" in
                (/*)
                  branch=${1#/}
                  ;;
                (*/)
                  branch=master
                  if [[ "${1%/}" -ne wayneeseguin ]] && [[ "${1%/}" -ne mpapis ]]
                  then sources=(github.com/${1%/}/rvm)
                  fi
                  ;;
                (*/*)
                  branch=${1#*/}
                  if [[ "${1%%/*}" -ne wayneeseguin ]] && [[ "${1%%/*}" -ne mpapis ]]
                  then sources=(github.com/${1%%/*}/rvm)
                  fi
                  ;;
                (*)
                  branch="$1"
                  ;;
              esac
              shift
            else
              fail "--branch must be followed by a branchname."
            fi
            ;;
    
          (--source|source)
            if [[ -n "${1:-}" ]]
            then
              if [[ "$1" = */*/* ]]
              then
                sources=($1)
                shift
              else
                fail "--source must be in the format <domain>/<account>/<repo>."
              fi
            else
              fail "--source must be followed by a source."
            fi
            ;;
    
          (--user-install|--ignore-dotfiles)
            token=${token#--}
            token=${token//-/_}
            export "rvm_${token}_flag"=1
            printf "%b" "Turning on ${token/_/ } mode.
    "
            ;;
    
          (--auto-dotfiles)
            flags+=( "$token" )
            export "rvm_auto_dotfiles_flag"=1
            printf "%b" "Turning on auto dotfiles mode.
    "
            ;;
    
          (--auto)
            export "rvm_auto_dotfiles_flag"=1
            printf "%b" "Warning, --auto is deprecated in favor of --auto-dotfiles.
    "
            ;;
    
          (--verify-downloads)
            if [[ -n "${1:-}" ]]
            then
              export rvm_verify_downloads_flag="$1"
              forwarded_flags+=( "$token" "$1" )
              shift
            else
              fail "--verify-downloads must be followed by level(0|1|2)."
            fi
            ;;
    
          (--autolibs=*)
            flags+=( "$token" )
            export rvm_autolibs_flag="${token#--autolibs=}"
            forwarded_flags+=( "$token" )
            ;;
    
          (--without-gems=*|--with-gems=*|--with-default-gems=*)
            flags+=( "$token" )
            value="${token#*=}"
            token="${token%%=*}"
            token="${token#--}"
            token="${token//-/_}"
            export "rvm_${token}"="${value}"
            printf "%b" "Installing RVM ${token/_/ }: ${value}.
    "
            ;;
    
          (--version|version)
            version="$1"
            shift
            ;;
    
          (head|master)
            version="head"
            branch="master"
            ;;
    
          (stable)
            version="latest"
            ;;
    
          (latest|latest-*|+([[:digit:]]).+([[:digit:]]).+([[:digit:]]))
            version="$token"
            ;;
    
          (--ruby)
            install_rubies+=( ruby )
            ;;
    
          (--ruby=*)
            token=${token#--ruby=}
            install_rubies+=( ${token//,/ } )
            ;;
    
          (--rails)
            install_gems+=( rails )
            ;;
    
          (--gems=*)
            token=${token#--gems=}
            install_gems+=( ${token//,/ } )
            ;;
    
          (--add-to-rvm-group)
            export rvm_add_users_to_rvm_group="$1"
            shift
            ;;
    
          (help|usage)
            usage
            exit 0
            ;;
    
          (*)
            usage
            exit 1
            ;;
    
        esac
      done
    
      if (( ${#install_gems[@]} > 0 && ${#install_rubies[@]} == 0 ))
      then install_rubies=( ruby )
      fi
    
      true "${version:=head}"
      true "${branch:=master}"
    
      if [[ -z "${sources[@]}" ]]
      then sources=("${DEFAULT_SOURCES[@]}")
      fi
    
      rvm_src_path="$rvm_path/src"
      rvm_archives_path="$rvm_path/archives"
      rvm_releases_url="https://rvm.io/releases"
    }
    
    rvm_install_validate_rvm_path()
    {
      case "$rvm_path" in
        (*[[:space:]]*)
          printf "%b" "
    It looks you are one of the happy *space* users(in home dir name),
    RVM is not yet fully ready for it, use this trick to fix it:
    
        sudo mkdir -p /${USER// /_}.rvm
        sudo chown -R "$USER:" /${USER// /_}.rvm
        echo "export rvm_path=/${USER// /_}.rvm" >> "$HOME/.rvmrc"
    
    and start installing again.
    
    "
          exit 2
        ;;
        (/usr/share/ruby-rvm)
          printf "%b" "
    It looks you are one of the happy Ubuntu users,
    RVM packaged by Ubuntu is old and broken,
    follow this link for details how to fix:
    
      http://stackoverflow.com/a/9056395/497756
    
    "
          [[ "${rvm_uses_broken_ubuntu_path:-no}" == "yes" ]] || exit 3
        ;;
      esac
    
      if [[ "$rvm_path" != "/"* ]]
      then fail "The rvm install path must be fully qualified. Tried $rvm_path"
      fi
    }
    
    rvm_install_select_and_get_version()
    {
      typeset _version_release
    
      for dir in "$rvm_src_path" "$rvm_archives_path"
      do
        [[ -d "$dir" ]] || mkdir -p "$dir"
      done
    
      _version_release="${version}"
      case "${version}" in
        (head)
          _version_release="${branch}"
          install_head sources[@] ${branch:-master} || exit $?
          ;;
    
        (latest)
          install_release sources[@] $(fetch_version sources[@]) || exit $?
          ;;
    
        (latest-minor)
          version="$(cat "$rvm_path/VERSION")"
          install_release sources[@] $(fetch_version sources[@] ${version%.*}) || exit $?
          ;;
    
        (latest-*)
          install_release sources[@] $(fetch_version sources[@] ${version#latest-}) || exit $?
          ;;
    
        (+([[:digit:]]).+([[:digit:]]).+([[:digit:]])) # x.y.z
          install_release sources[@] ${version} || exit $?
          ;;
    
        (*)
          fail "Something went wrong, unrecognized version '$version'"
          ;;
      esac
      echo "${_version_release}" > "$rvm_path/RELEASE"
    }
    
    rvm_install_main()
    {
      [[ -f ./scripts/install ]] ||
      {
        log "'./scripts/install' can not be found for installation, something went wrong, it usally means your 'tar' is broken, please report it here: https://github.com/rvm/rvm/issues"
        return 127
      }
    
      # required flag - path to install
      flags+=( --path "$rvm_path" )
      command bash "${flags[@]}"
    }
    
    rvm_install_ruby_and_gems()
    (
      if
        (( ${#install_rubies[@]} > 0 ))
      then
        source ${rvm_scripts_path:-${rvm_path}/scripts}/rvm
        source ${rvm_scripts_path:-${rvm_path}/scripts}/version
        __rvm_version
    
        for _ruby in ${install_rubies[@]}
        do command rvm "${forwarded_flags[@]}" install ${_ruby} -j 2
        done
        # set the first one as default, skip rest
        for _ruby in ${install_rubies[@]}
        do
          rvm "${forwarded_flags[@]}" alias create default ${_ruby}
          break
        done
    
        for _gem in ${install_gems[@]}
        do rvm "${forwarded_flags[@]}" all do gem install ${_gem}
        done
    
        printf "%b" "
      * To start using RVM you need to run \`source $rvm_path/scripts/rvm\`
        in all your open shell windows, in rare cases you need to reopen all shell windows.
    "
    
        if
          [[ "${install_gems[*]}" == *"rails"* ]]
        then
          printf "%b" "
      * To start using rails you need to run \`rails new <project_dir>\`.
    "
        fi
      fi
    )
    
    rvm_install()
    {
      rvm_install_initialize
      rvm_install_commands_setup
      rvm_install_default_settings
      rvm_install_parse_params "$@"
      rvm_install_validate_rvm_path
      rvm_install_select_and_get_version
      rvm_install_main
      rvm_install_ruby_and_gems
    }
    
    rvm_install "$@"

    2、执行如下命令,进行安装

    chmod +x rvm-installer.sh
    ./rvm-installer.sh

    image

    3、刷新rvm命令

    source /etc/profile.d/rvm.sh

    image

    4、安装完毕

     

    二、rubygems

    1、简介:

    RubyGems(简称 gems)是一个用于对 Ruby组件进行打包的 Ruby 打包系统。 它提供一个分发 Ruby 程序和库的标准格式,还提供一个管理程序包安装的工具。

    RubyGems的功能类似于Linux下的apt-get。使用它可以方便第从远程服务器下载并安装Rails

    参考:https://rubygems.org/pages/download

    2、安装步骤:

    介绍两种安装方式

    方式1:通过yum安装

    yum install rubygems

    image

    方式2:源码安装

    资源下载:rubygems-2.4.6.tgz

    https://rubygems.org/pages/download

    安装

    tar –zxvf rubygems-2.4.6.tgz
    cd rubygems-2.4.6
    ruby setup.rb

    image

     

    三、rake

    1、简介

    Rake的意思是Ruby Make,一个用ruby开发的代码构建工具。

    2、安装步骤

    介绍两种安装方式

    方式1:通过gem安装

    执行如下命令,即可完成安装

    gem install rake
    image

    方式2:源码安装

    资源下载:rake-0.8.7.tgz

    安装

    tar -zxvf rake-0.8.7.tgz
    cd ake-0.8.7
    ruby install.rb
    image
  • 相关阅读:
    nginx用户统计
    mysql用户和授权
    memcache操作
    nginx memcache缓存
    memcached安装启动
    Unity 菜单拓展
    用C#创建XML, XML格式化输出
    解析swf文件头,获取flash的原始尺寸
    kinematic与static刚体不会触发任何接触回调
    git使用
  • 原文地址:https://www.cnblogs.com/274914765qq/p/4426097.html
Copyright © 2020-2023  润新知