Для разработчика нередко приходится жонглировать несколькими серверами, которые взаимодействуют друг с другом во время разработки. Обеспечение того, чтобы на каждом сервере был установлен правильный порт при работе с localhost
, является громоздкой и подверженной ошибкам проблемой. port_map — это рубиновая утилита, которая обеспечивает простое и почти автоматическое решение этой проблемы.
Я разработал эту утилиту для решения моей личной проблемы, связанной с работой с несколькими веб-серверами во время разработки. Следующий раздел (Пример сценария) взят непосредственно из README port_map
.
Пример сценария
Вы разрабатываете службу, использующую несколько веб-серверов. У вас есть два приложения rails и одно приложение ember.
Проблема
В каждом из этих приложений требуется некоторая работа по настройке, чтобы убедиться, что они обмениваются данными через правильные порты. Здесь есть две проблемы:
- По мере того, как мы добавляем больше веб-серверов, мы должны избегать конфликтов на существующих портах.
- Вы должны убедиться, что вы правильно запускаете каждый сервер с правильным номером порта.
port_map
на помощь!
Мы собираемся преобразовать этот громоздкий сценарий в организованный и простой в управлении с помощью port_map
.
Имена доменов можно настроить с помощью переменных среды, но по умолчанию они основаны на имени каталога.
Вы можете закрыть и перезапустить каждый веб-сервер несколько раз, и они будут продолжать использовать одни и те же доменные имена. port_map
обеспечивает простой способ логического именования каждого веб-сервера, а также избавляет от необходимости указывать порты.
Испытание
Я использую port_map
чуть более 6 месяцев (на момент написания этой статьи), и он сослужил мне хорошую службу. Прелесть port_map
в том, что он работает с любой командой оболочки, которая принимает флаг --port <number>
или -p <number>
. Мне нравится находить новые способы использования port_map
на других веб-серверах, таких как посредник и джекил.
Была одна проблема, с которой я столкнулся, хотя она не является нарушителем соглашения kevinjalbert/port_map#7, хотя я подозреваю, что в конечном итоге смогу это исправить.
Поскольку port_map
является оболочкой команды, могут возникнуть интересные проблемы. Я использую Zsh в качестве своей оболочки вместе с кучей псевдонимов, которые были необходимы port_map
для поддержки запуска команд, содержащих псевдонимы. Недавно я перешел на zplug в качестве своего фреймворка для плагинов Zsh, где столкнулся со следующей проблемой zplug/zplug#209.
Последнее неудобство заключается в том, что port_map
— это RubyGem, который эффективно привязан к конкретной версии Ruby. При работе с проектами с несколькими версиями Ruby с использованием rvm/rbenv иногда port_map
не устанавливается. Это небольшое отклонение от установки port_map
для текущей версии Ruby, когда я переключаюсь на новую версию Ruby. В идеале port_map
не будет привязан к Ruby, а будет переносимым исполняемым файлом (например, написанным на Bash или Go).
Будущее
Я буду продолжать использовать port_map
до тех пор, пока не смогу поглубже покопаться в Vagrant и Docker. Эти две технологии изолируют и контейнеризируют среды (веб-сервисы). Я вижу преимущества таких технологий, поскольку они не зависят от хост-среды, которой в моем случае является мой ноутбук.
Первоначально опубликовано на kevinjalbert.com.