- Linux что такое gem
- Installation
- USE flags
- USE flags for dev-ruby/rubygems Centralized Ruby extension management system
- Emerge
- Usage
- Invocation
- Gem installation
- View gem’s environment
- RubyGems — подробно
- 1. Поиск, получение деталей, установка gem’s
- 2. Чтение документации по установленному gem
- 3. Использование установленных gem’s
- 4. Работа с версиями gem’s
- 5. Создание собственных gem’s
- Комфортное управление пакетами в Ruby
- Установка RVM
- Использование разных версий ruby и gemset’ы
- Создание отдельного окружения для проекта
Linux что такое gem
Gems are programs and libraries for the Ruby programming language. They are distributed by Ruby’s package manager, which is called RubyGems, which is accessed by the gem command.
This page is meant to be Ruby equivalent of Python’s pip page.
Installation
The gem command is installed with the RubyGems package, which will be installed to support the Ruby programming language. It is not advised to install RubyGems to the system’s world set. See the Ruby article for more information.
USE flags
USE flags for dev-ruby/rubygems Centralized Ruby extension management system
server | Install support for the rubygems server |
test | Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
Emerge
Usage
Invocation
RubyGems is a sophisticated package manager for Ruby. This is a basic help message containing pointers to more information. Usage: gem -h/--help gem -v/--version gem command [arguments. ] [options. ] Examples: gem install rake gem list --local gem build package.gemspec gem help install Further help: gem help commands list all 'gem' commands gem help examples show some examples of usage gem help gem_dependencies gem dependencies file guide gem help platforms gem platforms guide gem help show help on COMMAND (e.g. 'gem help install') gem server present a web page at http://localhost:8808/ with info about installed gems Further information: http://guides.rubygems.org
Gem installation
To install a package using the gem command, where gems is the desired gems:
View gem’s environment
The following command can be used to query gem installation paths and other useful information:
See the Application level package management article for best practices and information on adding gem binaries the user’s PATH .
RubyGems — подробно
Для начала определимся с понятиями:
RubyGems — фрэймворк для установки и запаковки Ruby библиотек и приложений.
gem — пакет(файл) с библиотекой или приложением. Имеет стандартизированный вид и расположен в хранилище в сети.
gem command tool — RubyGems предоставляет утилиту «gem» для работы с gem пакетами из командной строки. Она интегрирована с Ruby и позволяет получать доступ к установленным gem’ам как к библиотекам.
В чем же предназначение RubyGems?
До того как появилась RubyGems, для установки новой библиотеки нужно было найти, скачать её, попытаться установить, часто лишь для того, чтобы убедиться в отсутствии нужных зависимостей. Если же библиотека запакована с помощью RubyGems, достаточно попросить RubyGems сделать это за нас и получить установленную, интегрированную библиотеку со всеми нужными зависимостями. В дополнение ко всему утилита gem — платформонезависима, неважно какую ОС вы используете, везде механизм установки библиотек и приложений будет одинаков. Здорово, правда?
Под катом будут описаны:
1) Поиск, получение деталей, установка gem’s
2) Доступ документации по установленному gem
3) Использование установленных gem’s
4) Работа с версиями gem’s
5) Создание собственных gem’s
1. Поиск, получение деталей, установка gem’s
Допустим в вашем текущем проекте генерируется много XML. И где то вы слышали, что есть замечательная библиотека Jim Weirich’s Builder library, которая позволит вам создавать XML прямо в коде Ruby.
Посмотрим, доступна ли она в качестве gem:
% gem query —details —remote —name-matches build
*** REMOTE GEMS ***
AntBuilder (0.4.3)
Author: JRuby-extras
Homepage: jruby-extras.rubyforge.org
AntBuilder: Use ant from JRuby. Only usable within JRuby
builder (2.1.2)
Author: Jim Weirich
Homepage: onestepback.org
Builders for MarkUp.
.
—details — отображает детали о найденном gem
—remote — ищет на удалённом хранилище (—locale — поиск на локальной машине)
—name-matches build — фильтрует gem’s по содержанию строки ‘build’ в имени
Номер около названия каждого gem, показывает последнюю версию.
Список всех доступных версий для определённого gem, запустим команду list с опцией —all:
% gem list —details —remote —all builder
*** REMOTE GEMS ***
builder (2.1.2, 2.1.1, 2.0.0, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.0,
1.0.0, 0.1.1, 0.1.0)
Author: Jim Weirich
Homepage: onestepback.org
Builders for MarkUp.
Для установки самой последней версии:
% gem install builder #RubyGems сам выберет последнюю
По умолчанию (если вы не используете RVM), для установки gem’s используются общие системные директории, так что под Unix нужно добавлять sudo перед командой gem.
Список уже установленных на вашем компьютере gem’s:
gem list
*** LOCAL GEMS ***
builder (2.1.2)
2. Чтение документации по установленному gem
Мы установили gem builder, возникает вопрос, как с ним работать?
В большинстве случаев gem содержит документацию, она хранится в /doc директории, например:
#Узнаем путь где хранятся наши gem’s
% gem environment gemdir
/usr/local/lib/ruby/gems/1.9.0
/usr/local/lib/ruby/gems/1.9.0/doc — здесь лежит документация к установленным gem’s
/usr/local/lib/ruby/gems/1.9.0/doc/builder-2.1.2/rdoc/index.html — полный путь к документации gem’а builder в моём случае
Есть 2 способа читать документацию:
1. Заходить в директорию с документацией гема и запускать файл index.html
2. Более простой способ, запустить web сервер, командой % gem server
По умолчанию он запустится на порту 8808 и будет доступен по ссылке localhost:8808
В браузере вы увидите документацию на все установленные gem’s.
Путь к директории с gem’s и порт могут быть перезаданы с помощью опций -p и -d
3. Использование установленных gem’s
После установки gem, достаточно написать команду require , чтобы подключить его. Т.е. работа с гемами не отличается от работы с обычными библиотеками.
# пример генерации XML с помощью установленной нами библиотеки require 'builder' xml = Builder::XmlMarkup.new(target: STDOUT, indent: 2) xml.person(type: "programmer") do xml.name do xml.first "Dave" xml.last "Thomas" end xml.location "Texas" xml.preference("ruby") end
4. Работа с версиями gem’s
Что если последняя вышедшая версия используемого вами gem не совместима с той которую вы используете сейчас?
К счастью, RubyGems позволяет нам одновременно хранить несколько версий gem. Указанные ниже команды установят обе версии builder.
% gem install builder -v 2.1.2
% gem install builder -v 1.1.0
% gem list builder
*** LOCAL GEMS ***
builder (2.1.2, 1.1.0)
#Подключение builder v.1.1.0 gem 'builder', '= 1.1.0' require 'builder' xml = Builder::XmlMarkup.new(STDOUT, 2) xml.person do name("Dave Thomas") location("Texas") end
Тут доступны ещё несколько трюков:
gem ‘builder’ , ‘> 1’ — использовать версию больше чем первую
gem ‘builder’ , »>= 2.2.0′, ‘ < 3.0'' — использовать версию больше 2.2.0 и меньше 3.0
Полный список выражений:
= идентичная версия
!= неидентичная версия
> версия больше чем
< версия меньше чем
>= большая и равная версия
~> примерно больше чем (подробнее RubyGems docs)
5. Создание собственных gem’s
- написание кода соответсвующего gem структуре
- создание файла спецификации (ourgem.gemspec)
- создание gem файла
% gem build mygem.gemspec - размещение созданного гема на сервере rubygems.org
%gem push mygem.gemspec
Комфортное управление пакетами в Ruby
RVM — Ruby Version Manager (менеджер управления пакетами в ruby) сослужит хорошую службу в тех частых ситуациях, когда вам может потребоваться запуск нескольких версий ruby на одной машине или же нескольких проектов с разными наборами gem’ов для них. Чем-то напоминает virtualenv, если сравнивать с аналогичным приложением для python.
Данный пост предположительно рассчитан на новоиспечённых рубистов и предназначен для облегчения и в какой-то мере даже автоматизации их труда.
Что такое gem?
Gem (драгоценный камень, жемчужина) — пакет ruby, предоставляющий какую-то функциональность. Например, библиотека redcarpet , доступная в виде gem’а, обеспечивает поддержку markdown.
Что такое gemset?
Gemset (set: набор, комплект) — набор gem’ов.
Установка RVM
$ \curl -L https://get.rvm.io | bash Downloading RVM branch master % Total % Received % Xferd Average Speed Dload Upload 100 124 100 124 0 0 107 100 1084k 100 1084k 0 0 234k * To start using RVM you need to run `source /home/user/.rvm/scripts/rvm`
Перезапускаем консоль и убеждаемся в том, что rvm был успешно установлен:
$ rvm -v rvm 1.23.13 $ rvm get stable --auto-dotfiles
Дополним переменную PATH, дабы указать путь к директории rvm. Запись нужно сделать в .bashrc или .zshenv .
# .bashrc export PATH="$PATH:$HOME/.rvm/bin"
Дальше любопытно было бы просмотреть список доступных для установки и уже установленных пакетов ruby.
$ rvm list known # просмотреть все доступные для установки версии Ruby $ rvm list # все установленные версии Ruby =* ruby-1.9.3-p448 [ x86_64 ] # => - current - текущая версия # =* - current && default - текущая и спользуется по-умолчанию # * - default - используемая по-умолчанию версия
Использование разных версий ruby и gemset’ы
$ source ~/.rvm/scripts/rvm # активировать rvm $ rvm install 1.9.3 # установить несколько версий ruby $ rvm install 2.0.0 $ rvm use ruby-2.0.0-p247 --default # переключиться на ruby 2 и использовать v2 по-умолчанию $ rvm list ruby-1.9.3-p448 [ x86_64 ] =* ruby-2.0.0-p247 [ x86_64 ] # => - current # =* - current && default # * - default
Для примера создадим gemset jekyll , где будут собраны все нужные одноимённому генератору статических страниц gem’ы.
$ source ~/.rvm/scripts/rvm # «включаем» rvm $ rvm use 1.9.3@jekyll --create # создать gemset $ rvm use 1.9.3@jekyll --default # выбирать его по-умолчанию $ gem install jekyll jekyll-tagging i18n # установка gem'ов $ gem list # просмотр установленных в выбранном gemset'е gem'ов i18n (0.6.5) jekyll (1.2.1) jekyll-tagging (0.5.0) liquid (2.5.3) maruku (0.7.0)
Gemset’ы создаются для определённой версии ruby. Так, при переключении с одной версии на другую вы будете всегда видеть разный набор gemset’ов: отображаются они также лишь для своей версии.
$ rvm gemset list # набор gemset'ов для ruby2 gemsets for ruby-2.0.0-p247 (default) => example global $ cd workspace/jekyll # переход в директорию проекта, где используется ruby1.9 $ rvm gemset list # набор gemset'ов для ruby1.9 gemsets for ruby-1.9.3-p448 (default) global => jekyll
Но здесь мы забежали чуть вперёд. Дело в том, что при переходе в директорию проекта, автоматически меняется версия ruby и набор gemset’ов, о чём речь пойдёт чуть ниже.
Gemset’ы можно удалять(delete), очищать(), экспортировать(export) и импортировать(import) gem’ы из одного в gemset’a в другой. Наиболее часто используемые действия отражены в данной ниже таблице.
команда | описание |
---|---|
rvm gemset create | создать новый gemset |
rvm gemset export new.gems | экспорт списка gem’ов в файл new.gems |
rvm gemset import new.gems | импорт в текущий gemset списка gem’ов из файла new.gems |
rvm gemset delete | удалить gemset |
rvm gemset empty | очистить gemset |
rvm gemset delete example —force | полностью удалить gemset example |
rvmreset | перезагрузка RVM |
rvm uninstall | удалить версию Ruby, оставить исходники |
rvm implode | полностью удалить RVM! |
rvm list known | получить список всех версий ruby доступных для установки |
rvm list | отобразить список установленных версий ruby |
rvm gemset list | просмотреть список gemset’ов в выбранной версии ruby |
rvm install 1.9.3 | установить ruby версии 1.9.3 |
rvm remove 1.9.3 | удалить ruby версии 1.9.3 |
rvm use 1.9.3 | переключиться на ruby версии 1.9.3 |
rvm use 1.9.3@jekyll —default | использовать версию ruby 1.9.3 c gemset jekyll по умолчанию |
rvm use system | использовать системную версию ruby |
Создание отдельного окружения для проекта
Бывают случаи, когда необходимо не просто использовать разные версии ruby, но и разные версии gemset’ов для разных проектов. В этом посильную помощь может оказать создание своего окружения для каждого из проектов.
В примере выше мы создали gemset jekyll , который использует версию ruby 1.9.3 и собственный набор gem’ов. Теперь у нас имеется два пути для работы с ним.
Переключение между gemset’ами
Во-первых, можно переключаться между gemsets при необходимости.
$ rvm gemset use global $ rvm gemset use jekyll
Но зачастую быстрее один раз внести необходимые настройки. Для этого следует создать два файла в каталоге с проектом: .ruby-gemset и .ruby-version , куда и поместить информацию об используемом в проекте gemset’е и версии ruby соответственно.
$ cat ~/workspace/jekyll/.ruby-gemset jekyll $ cat ~/workspace/jekyll/.ruby-version ruby-1.9.3-p448
Теперь достаточно просто зайти в директорию проекта, и нужные нам параметры будут установлены автоматически.
$ cd workspace/jekyll $ rvm list => ruby-1.9.3-p448 [ x86_64 ] * ruby-2.0.0-p247 [ x86_64 ] # => - current # =* - current && default # * - default
То есть, если вы использовали версию ruby 2, после перехода в каталог с проектом, она автоматически изменится на версию, указанную в .ruby-version , что достаточно удобно.