Настройка сервера EC2 с помощью rvm через сценарии
Я ищу способ установить rvm, установить определенную версию ruby (используя rvm) и установить эту установленную версию ruby по умолчанию. Прежде чем я смогу установить rvm, мне нужно установить gcc и некоторые другие базовые программные пакеты. Что я пробовал до сих пор:
1) Использование net/ssh
- Мне нужно смоделировать псевдотерминал, чтобы иметь возможность выполнять некоторые команды, и до сих пор я не мог понять, как отличить успешное завершение полной команды от неуспешной полной.
- после установки rvm я наткнулся на проблемы с использованием rvm ("rvm не функция", сообщения об ошибках, приводящие к невозможности установить версию ruby по умолчанию).
2) Использование капистрано
В выводе ssh вставляются символы новой строки, так что, например, индикатор выполнения печатается в новой строке каждый раз, когда достигается определенный прогресс. Это то, с чем я могу жить.
Те же проблемы с rmv, я могу установить rvm, но не могу установить значение по умолчанию:
rvm --default use 1.9.2
например. Нет сообщения об ошибке, но когда я вхожу позже, по умолчанию не устанавливается иruby -v
показывает старый системный рубин.
3) Использование capistrano и rvm-capistrano
- Теперь я столкнулся с проблемой, та самая задача, которую я пытаюсь выполнить перед установкой rvm, терпит неудачу, потому что, кажется, есть какая-то магия, которая работает с оболочкой по умолчанию:
* 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 и немного взлом
Обновление: с помощью mpapis в чате RVM я смог найти это рабочее решение: требуется "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 используется не как функция, а как программа direct.
С уважением, Торстен
1 ответ
Проверьте сайт 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/ быстрое развертывание, используя-Капистрано-RVM-и-более /