Nano Hash - криптовалюты, майнинг, программирование

Запуск новой версии Ruby рядом с существующей версией Ruby

РАСКРЫТИЕ: я очень мало знаю о Ruby, кроме базового синтаксиса кода. Смирись с моим идиотизмом.

Библиотека OpenSSL Ruby 1.8, похоже, не поддерживает TLS 1.2. Однако есть работающие приложения, зависящие от версии 1.8, поэтому я хочу посмотреть, смогу ли я запустить более новую версию Ruby одновременно в той же системе и настроить ее с более новыми версиями тех же драгоценных камней.

В настоящее время версия 1.8 находится в /usr/lib/ruby/1.8. В идеале я хотел бы сохранить ту же структуру и установить более новую версию (не знаю, какая самая последняя, ​​стабильная версия - будь то 2.3.x или 2.4.x).

Тем не менее, я не администратор Ruby. Я унаследовал сервер от кого-то, кто решил, что Ruby — лучший способ делать что-то, несмотря на то, что в компании не было другого опыта работы с Ruby, а затем они ушли. Я знаю некоторые вещи системного администратора, но я не знаю:

  1. Насколько обратно совместимы версии Ruby (например, будет ли приложение, созданное для версии 1.8, работать без каких-либо серьезных изменений в версии 2.4.1).
  2. Как работают/обновляются драгоценные камни. Может ли 2.4.1 использовать драгоценные камни из 1.8, или драгоценные камни привязаны к определенным версиям Ruby? Может ли быть микс-и-матч? Есть ли какой-то путь миграции?
  3. Как правильно управлять двумя разными одновременными версиями (как указать приложению использовать одну версию вместо другой или предотвратить автоматические попытки существующих приложений использовать новую версию и сломаться, если они несовместимы).
  4. Любые лучшие практики установки (обычно я компилирую из исходников, но открыт для предложений).
  5. Возможно ли просто обновить библиотеку Ruby OpenSSL без обновления всего приложения Ruby? В настоящее время он работает на OpenSSL 0.9.8o, поэтому он значительно отстает от времени.

На сервере работает Debian 6.0.6 (хотя я больше знаком с Red Hat и CentOS, поэтому любые советы по управлению пакетами и т. д., связанные с этой проблемой, будут приветствоваться).

14.08.2017

Ответы:


1
  1. Современный рубин «повзрослел» и стал очень стабильным. Обновление с 2.0.0 --> (последняя стабильная версия) 2.4.1, как правило, довольно просто. Тем не менее, ruby ​​прошел через период довольно серьезных (необходимых!) изменений от 1.8 --> 1.9 --> 2.0; эта часть обновления может быть проблематичной.
  2. Gems устанавливаются внутри текущей установки ruby. Так, например, в настоящее время у вас есть «ruby 1.8 версия» CanCan. Если вы обновите рубиновую версию этого приложения, вам нужно будет переустановить все гемы (предположительно через bundle install) для рубиновой версии. Путь миграции в основном таков: получите как можно более полный набор тестов; как можно больше улучшайте драгоценные камни в этой рубиновой версии; обновить рубиновую версию; исправить тесты и/или код при необходимости; повторить.
  3. Используйте такой инструмент, как rvm или rbenv, чтобы установить несколько одновременных версий ruby ​​на одном компьютере.
  4. См. пункт 3. Вам, вероятно, не нужно ничего компилировать из исходников.
  5. Ruby 1.8 устарел. Его поддержка была прекращена еще в 2013 году. Теперь ваше приложение, несомненно, будет иметь огромный список устаревших библиотек со всевозможными уязвимостями безопасности — вот что происходит, когда вы не обновляете его более 6 лет! С точки зрения безопасности я бы не советовал пытаться найти какой-то обходной путь для этой проблемы с OpenSSL и игнорировать более крупную проблему.
14.08.2017
  • Так что, по-видимому, собственная библиотека OpenSSL системы все еще была на 0.9.8o. Фу. Таким образом, очевидно, что система нуждается в серьезном пересмотре, но это будет гораздо более масштабный процесс, и я просто пытаюсь найти временное решение, чтобы решить проблему остановки шоу для наших разработчиков. Я устанавливаю OpenSSL 1.0.2l в отдельную папку /usr/local/openssl/1.0.2l в системе. Есть ли шанс обновить существующую установку Ruby, чтобы просто указать на это? 14.08.2017
  • По-видимому, у меня не установлены rvm или rbenv. 14.08.2017
  • OpenSSLs ABI также изменился между 0.9.8 и 1.0.2. Таким образом, ваш уже скомпилированный Ruby 1.8, вероятно, не будет работать (правильно) с OpenSSL 1.0.2 без перекомпиляции. 14.08.2017
  • Вам нужно будет перекомпилировать ruby ​​из исходного кода и после быстрого поиска в Google, возможно, применить некоторый патч(а)? Я никогда не пробовал это раньше, поэтому я не знаю наверняка. но, как я уже сказал, у вас, несомненно, есть множество других проблем безопасности, которые нужно решить; долгосрочное исправление, безусловно, состоит в том, чтобы правильно обновить или переписать все это. 14.08.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..