Управление зависимостями через Homebrew


Homebrew

Для управления зависимостями в проектах на Ruby мы используем Bundler. Он позволяет с легкостью устанавливать в проект необходимые нам библиотеки, вместе со всеми зависимостями.

Но что делать с внешними зависимостями проекта, такими как Redis или Node.js? Ситуация усугубляется, когда тебя подключают к новому проекту с большим багажом таких зависимостей. И вместо того, чтобы разбираться в проекте, ты тратишь целый день на установку всего этого зоопарка.

Homebrew Bundle

Для решения этой проблемы можно воспользоваться Homebrew Bundle. Он позволяет управлять внешними зависимостями проекта так же, как и Bundler внутренними, с помощью специального файла - Brewfile.

Итак, приступим. Устанавливаем Homebrew Bundle:

$ brew tap Homebrew/bundle
==> Tapping homebrew/bundle
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-bundle'...
remote: Counting objects: 57, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 57 (delta 5), reused 16 (delta 2), pack-reused 0
Unpacking objects: 100% (57/57), done.
Checking connectivity... done.
Tapped 0 formulae (126 files, 154.5K)

Теперь необходимо создать Brewfile в корне проекта и добавить туда все необходимые зависимости. Это можно сделать вручную или запустить команду brew bundle dump, которая создаст файл со всеми установленными пакетами из Homebrew, например:

tap prosody/prosody

brew 'node'
brew 'redis'
brew 'prosody'
brew 'rabbitmq'
brew 'phantomjs'
brew 'postgresql'
brew 'imagemagick'

Запускаем команду brew bundle, чтобы установить или обновить все зависимости.

$ brew bundle
Succeeded in installing node
Succeeded in installing redis
Succeeded in installing prosody
Succeeded in installing rabbitmq
Succeeded in installing phantomjs
Succeeded in installing postgresql
Succeeded in installing imagemagick

Success: 7 Fail: 0

На этом можно было закончить, но что делать, если в команде есть разработчики на Linux? У них ведь нет Homebrew.

Linuxbrew

Homebrew - нет, но есть аналог - Linuxbrew. Он абсолютно так же работает, как и Homebrew на macOS.

Для его использования потребуется установить несколько дополнительных пакетов в свой дистрибутив:

$ sudo apt-get install build-essential curl git python-setuptools ruby

Далее устанавливаем Linuxbrew:

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install)"
==> This script will install:
/home/ubuntu/.linuxbrew/bin/brew
/home/ubuntu/.linuxbrew/Library/...
/home/ubuntu/.linuxbrew/share/doc/homebrew
/home/ubuntu/.linuxbrew/share/man/man1/brew.1
/home/ubuntu/.linuxbrew/share/zsh/site-functions/_brew
/home/ubuntu/.linuxbrew/etc/bash_completion.d/brew
/home/ubuntu/.cache/Homebrew/

Press RETURN to continue or any other key to abort
==> Downloading and installing Linuxbrew...
remote: Counting objects: 1040, done.
remote: Compressing objects: 100% (930/930), done.
remote: Total 1040 (delta 106), reused 481 (delta 75), pack-reused 0
Receiving objects: 100% (1040/1040), 1.01 MiB | 325.00 KiB/s, done.
Resolving deltas: 100% (106/106), done.
From https://github.com/Linuxbrew/brew
 * [new branch]      master     -> origin/master
HEAD is now at b75ca7b CONTRIBUTING.md: Update Contributing to Linuxbrew
==> Homebrew has enabled anonymous aggregate user behaviour analytics
Read the analytics documentation (and how to opt-out) here:
  https://git.io/brew-analytics
==> Tapping homebrew/core
Cloning into '/home/ubuntu/.linuxbrew/Library/Taps/homebrew/homebrew-core'...
remote: Counting objects: 3773, done.
remote: Compressing objects: 100% (3663/3663), done.
remote: Total 3773 (delta 12), reused 335 (delta 1), pack-reused 0
Receiving objects: 100% (3773/3773), 3.05 MiB | 577.00 KiB/s, done.
Resolving deltas: 100% (12/12), done.
Checking connectivity... done.
Tapped 3651 formulae (3,800 files, 9.5M)
Warning: /home/ubuntu/.linuxbrew/bin is not in your PATH.
==> Installation successful!
==> Next steps
Install the Linuxbrew dependencies:

Debian, Ubuntu, etc.:
  `sudo apt-get install build-essential`

Fedora, Red Hat, CentOS, etc.:
  `sudo yum groupinstall 'Development Tools'`

See http://linuxbrew.sh/#dependencies for more information.

Add to your ~/.zshrc by running
  echo 'export PATH="/home/ubuntu/.linuxbrew/bin:$PATH"' >>~/.zshrc
  echo 'export MANPATH="/home/ubuntu/.linuxbrew/share/man:$MANPATH"' >>~/.zshrc
  echo 'export INFOPATH="/home/ubuntu/.linuxbrew/share/info:$INFOPATH"' >>~/.zshrc

We recommend you install GCC by running `brew install gcc`.
Run `brew help` to get started
Further documentation: https://git.io/brew-docs
==> Homebrew has enabled anonymous aggregate user behaviour analytics
Read the analytics documentation (and how to opt-out) here:
  https://git.io/brew-analytics

Затем добавляем пути в ~/.zshrc:

$ echo 'export PATH="/home/ubuntu/.linuxbrew/bin:$PATH"' >> ~/.zshrc
$ echo 'export MANPATH="/home/ubuntu/.linuxbrew/share/man:$MANPATH"' >> ~/.zshrc
$ echo 'export INFOPATH="/home/ubuntu/.linuxbrew/share/info:$INFOPATH"' >> ~/.zshrc

Перезапускаем zsh:

$ source ~/.zshrc

И всё, теперь можно перейти в проект и выполнить команду brew bundle. Все необходимые зависимости для вашего проекта будут установлены.

Похожие записи

Автоматическая проверка кода с помощью Vexor

Пошаговая инструкция, что для этого нужно сделать.

Класс Set и уникальные коллекции объектов

Рассмотрим решение одной задачи с использованием класса Set и DDD.

Настройка Passenger для работы с Action Cable

Решаем проблему работы WebSocket-сервера через Phusion Passenger.

Настройка Rails-сервера на DigitalOcean

Настройка боевого Rails-сервера на DigitalOcean. Шаг за шагом.

Резервное копирование GitLab с помощью rsync

Мини-проект для автоматического резервного копирования GitLab c помощью Ruby и rsync.

Настройка Rails-окружения на OS X Yosemite

Полноценное рабочее окружение на OS X 10.10 Yosemite: Ruby, Homebrew, Oh My ZSH, rbenv и многое другое.