Я использую EC2 и иногда запускаю серверы, которые хочу использовать только на короткое время. Обычно я хочу установить на них какую-то версию или версии Ruby, и для этого RVM очень удобен - если бы не тот факт, что компиляция Ruby занимает вечность. Действительно скучно ждать почти полчаса только для компиляции Ruby, когда остальная часть настройки сервера выполняется за считанные минуты. Это полностью убивает опыт облачных вычислений.
Есть ли способ получить удобство RVM без неудобств компиляции каждой версии Ruby для каждого нового сервера, который я запускаю? Могу ли я предварительно скомпилировать версию Ruby и сохранить ее где-нибудь в доступном месте, а затем использовать ее в RVM вместо компиляции из исходного кода? Могу ли я просто заархивировать какой-либо каталог в корневом каталоге RVM после установки версии Ruby, сохранить ее где-нибудь, а затем извлечь ее в нужное место на следующем сервере, который я запустил? В таком случае, какие файлы и каталоги мне нужно сохранить?
Я хочу использовать RVM не только для того, чтобы иметь возможность переключаться между версиями Ruby, но и потому, что он позволяет мне хранить отдельные гемсеты для разных приложений, поэтому не использовать RVM было бы очень неудобно.
Все серверы имеют одинаковую ОС и архитектуру, Ubuntu 10.04, 32 бит.
Возможно, сейчас это немного долго, но начиная с версии 1.16 rvm поддерживает загрузку предварительно скомпилированных двоичных файлов.
У меня возникли трудности, когда я попросил головную версию (например, 1.9.3)
20130212 00:31:00 dev@domU-xxxx:~ rvm install 1.9.3
Searching for binary rubies, this might take some time.
No binary rubies available for: ubuntu/12.04/i386/ruby-1.9.3-p385.
Continuing with compilation. Please read 'rvm mount' to get more information on binary rubies.
Итак, я посмотрел, что на самом деле было доступно в готовых двоичных файлах:
20130212 00:31:27 dev@domU-xxxx:~ rvm list remote
# Rubies available for 'ubuntu/12.04/i386':
ruby-1.9.3-p194
ruby-1.9.3-p286
ruby-1.9.3-p327
ruby-1.9.3-p362
ruby-1.9.3-p374
ruby-2.0.0-rc1
И изменил мою установку, чтобы запросить последнюю предварительно скомпилированную версию
20130212 00:34:25 dev@domU-xxxx:~ rvm install 1.9.3-p374
Searching for binary rubies, this might take some time.
ruby-1.9.3-p374 - #configure
ruby-1.9.3-p374 - #download
######################################################################## 100.0%
ruby-1.9.3-p374 - #validate archive
ruby-1.9.3-p374 - #extract
ruby-1.9.3-p374 - #validate binary
ruby-1.9.3-p374 - #setup
Saving wrappers to '/home/dev/.rvm/bin'.
ruby-1.9.3-p374 - #importing default gemsets, this may take time ...
20130212 00:35:59 dev@domU-xxxxx:~
Как видите, это заняло менее 2 минут (в отличие от 15-20 минут, необходимых для компиляции на небольшом экземпляре EC2). Надеюсь, это поможет кому-то еще с той же проблемой.
Хм ... почему бы не создать EBS AMI с RVM и версиями Ruby и не запустить его в любое время? Просто мысль.:)
Если вы не хотите продолжать использовать RVM, то, может быть, вы захотите использовать двоичные пакеты ruby-enterprise? Я использую его не только потому, что он намного быстрее устанавливается, но и из-за ужасно сделанных пакетов в Ubuntu / Debian в настоящее время.
Итак, есть бинарные пакеты для Ubuntu, и я уверен, что помимо последний версия, они также позволяют загружать предыдущую версию и т. д.
Проверить это: http://www.rubyenterpriseedition.com/download.html#ubuntu
Единственная проблема заключается в том, что это, вероятно, не позволит вам переключаться между установками ruby на одном и том же экземпляре. Я не уверен, что вам это абсолютно необходимо.
Но кроме этого, было бы просто удалить скрипт и установить его либо в bash, либо, возможно, с рецептом от шеф-повара. Но, конечно, это не так удобно, как rvm.
Редактировать:
Если вы не можете использовать REE .deb, проще всего будет создать AMI на основе EBS и включить установку rvm вместе с вашими наиболее часто используемыми версиями Ruby. Это только одно решение проблемы.
Другое решение - проверить /etc/rvm
(при условии общесистемной установки) для rvm_path
, rvm_prefix
, rvm_bin_path
и rvm_man_path
и получение этих файлов и их загрузка в экземпляр, когда вы его запустили.
Этот процесс можно автоматизировать с помощью небольшого сценария оболочки, который вы передаете экземпляру EC2 (см. user-data
) при запуске.
В качестве общей меры я бы также проверил возможность передачи пользовательских ./configure
флаги для rvm, когда вы создаете дополнительные версии ruby для может быть ускорить компиляцию. Я не совсем уверен, но держу пари, вы можете сохранить их в .rvm
файл или аналогичный.
Альтернативой приведенному выше является получение более мощного экземпляра, но это может не сработать в долгосрочной перспективе, поскольку связанные с этим затраты на его запуск также выше.
Если вы развернете предварительно настроенную папку ~ / .rvm и убедитесь, что удаленный .bashrc настроен на ее использование, возникнут ли у вас проблемы? Насколько я могу судить, rvm разработан, чтобы позволить вам это делать.
Единственные препятствия, которые я представляю, могут заключаться в том, чтобы убедиться, что у вас есть нужные драгоценные камни и пакеты, позволяющие запускать ваш код. Но тогда вы бы подготовили свой .rvm на целевой платформе, верно? Также примите во внимание любые пакеты ОС, требуемые вашей средой ruby.
В последних версиях RVM вы можете передать --binary
вариант
rvm install ruby-2.2.1 --binary --max-time 20
Вы можете найти полный список доступных двоичных файлов с помощью rvm list remote
rvm list remote
# Remote rubies available:
jruby-0.9.0
jruby-1.6.5
jruby-1.7.8
jruby-1.7.9
jruby-9.0.0.0.pre1
jruby-9.0.0.0.pre2
jruby-9.0.0.0.pre2200
jruby-9.0.0.0.rc1
jruby-9.0.0.0.rc1200
jruby-9.0.0.0.rc2
jruby-9.0.0.0.rc2200
rubinius-1.4.6
rubinius-2.3.0
rubinius-2.5.3
rubinius-2.5.4
rubinius-2.5.5
rubinius-2.5.7
ruby-1.9.3-p547
ruby-1.9.3-p551
ruby-2.0.0-p481
ruby-2.0.0-p576
ruby-2.0.0-p598
ruby-2.1.2
ruby-2.1.3
ruby-2.1.5
ruby-2.2.0
ruby-2.2.1
# * - installed already
# To download and install: rvm install {name} --binary