Ruby on Rails
Драгоценные камни
Поиск…
замечания
Документация Gemfile
Для проектов, которые, как ожидается, будут расти, неплохо добавить комментарии к вашему Gemfile
. Таким образом, даже в больших установках вы все равно знаете, что делает каждый камень, даже если имя не является самоочевидным, и вы добавили его 2 года назад.
Это также поможет вам вспомнить, почему вы выбрали определенную версию и, следовательно, позже оцените ее версию.
Примеры:
# temporary downgrade for TeamCity
gem 'rake', '~> 10.5.0'
# To upload invoicing information to payment provider
gem 'net-sftp'
Что такое драгоценный камень?
Драгоценный камень является эквивалентом плагина или расширения для рубина языка программирования.
Точнее, даже рельсы - не что иное, как драгоценный камень. Много драгоценных камней построено на рельсах или других драгоценных камнях (они зависят от этого драгоценного камня) или являются отдельными.
В проекте Rails
Gemfile
Для вашего проекта Rails у вас есть файл Gemfile
. Здесь вы можете добавить драгоценные камни, которые вы хотите включить и использовать в своем проекте. После добавления вам необходимо установить драгоценный камень, используя bundler
(см. Раздел Bundler).
Gemfile.lock
Как только вы это Gemfile.lock
, ваш Gemfile.lock
будет обновлен вашими недавно добавленными драгоценными камнями и их зависимостями. Этот файл блокирует используемые вами драгоценные камни, поэтому они используют эту конкретную версию, объявленную в этом файле.
GEM
remote: https://rubygems.org/
specs:
devise (4.0.3)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0, < 5.1)
responders
warden (~> 1.2.3)
Этот пример для гема devise
. В Gemfile.lock
версия 4.0.3
, чтобы сообщать при установке вашего проекта на другой машине или на вашем производственном сервере, для которой указанная версия используется.
развитие
Либо один человек, группа или целое сообщество работает и поддерживает драгоценный камень. Выполненная работа, как правило , освобожден после того, как некоторые issues
были исправлены или features
, которые были добавлены.
Обычно выпуски следуют принципу Semantic Versioning 2.0.0 .
Bundler
Самый простой способ обработки и управления драгоценными камнями - использование bundler
. Bundler - это менеджер пакетов, сопоставимый с bower.
Чтобы использовать пакет, вам сначала нужно его установить.
gem install bundler
После того как у вас Gemfile
и запущен Gemfile
вы должны добавить gems в свой Gemfile
и запустить
bundle
в вашем терминале. Это устанавливает ваши недавно добавленные драгоценные камни в ваш проект. В случае возникновения проблемы вы получите приглашение в своем терминале.
Если вас интересует более подробная информация, я предлагаю вам ознакомиться с документами .
Gemfiles
Для начала, gemfiles требуют, по крайней мере, один источник, в виде URL-адреса для сервера RubyGems.
Создайте Gemfile с исходным кодом rubygems.org, запустив bundle init
. Используйте https, поэтому ваше соединение с сервером будет проверено с помощью SSL.
source 'https://rubygems.org'
Затем объявите драгоценные камни, которые вам нужны, включая номера версий.
gem 'rails', '4.2.6'
gem 'rack', '>=1.1'
gem 'puma', '~>3.0'
Большинство спецификаторов версии, например> = 1.0, не требуют пояснений. Спецификатор ~> имеет особое значение. ~> 2.0.3 идентичен> = 2.0.3 и <2.1. ~> 2.1 совпадает с> = 2.1 и <3.0. ~> 2.2.beta будет соответствовать предварительным версиям типа 2.2.b.12.
Репозитории Git также являются достоверными источниками драгоценных камней, если репо содержит один или несколько действующих драгоценных камней. Укажите, что проверить :tag
:branch
или :ref
. По умолчанию используется master
ветвь.
gem 'nokogiri', :git => 'https://github.com/sparklemotion/nokogiri', :branch => 'master'
Если вы хотите использовать распакованный камень непосредственно из файловой системы, просто установите путь: путь к пути, содержащему файлы gem.
gem 'extracted_library', :path => './vendor/extracted_library'
Зависимости могут быть помещены в группы. Группы могут быть проигнорированы во время установки (с использованием - без --without
) или требуются все сразу (с использованием Bundler.require
).
gem 'rails_12factor', group: :production
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'dotenv-rails'
end
Вы можете указать требуемую версию Ruby в Gemfile с ruby
. Если Gemfile загружается в другую версию Ruby, Bundler будет вызывать исключение с объяснением.
ruby '2.3.1'
Gemsets
Если вы используете RVM(Ruby Version Manager)
то использовать gemset
для каждого проекта - хорошая идея. gemset
- это просто контейнер, который вы можете использовать, чтобы держать драгоценные камни отдельно друг от друга. Создание gemset
каждого проекта позволяет вам изменять драгоценные камни (и версии gem) для одного проекта, не нарушая всех ваших других проектов. Каждый проект должен только беспокоиться о своих драгоценных камнях.
RVM
обеспечивает (> = 0.1.8) @global gemset
для рубинового интерпретатора. Драгоценные камни, которые вы устанавливаете в @global gemset
для данного рубина, доступны для всех других гемзет, созданных вами в сочетании с этим рубином. Это хороший способ разрешить всем вашим проектам использовать один и тот же установленный жемчуг для конкретной установки интерпретатора Ruby.
Создание гемзет
Предположим, что у вас уже установлен ruby-2.3.1
и вы выбрали его с помощью этой команды:
rvm use ruby-2.3.1
Теперь, чтобы создать gemset для этой рубиновой версии:
rvm gemset create new_gemset
где new_gemset
- это имя gemset. Чтобы просмотреть список доступных gemset для рубиновой версии:
rvm gemset list
для перечисления драгоценных камней всех рубиновых версий:
rvm gemset list_all
использовать gemset из списка (предположим, что new_gemset
- это gemset, который я хочу использовать):
rvm gemset use new_gemset
вы также можете указать версию ruby с помощью gemset, если вы хотите перейти на другую версию ruby:
rvm use ruby-2.1.1@new_gemset
для указания gemset по умолчанию для конкретной версии Ruby:
rvm use 2.1.1@new_gemset --default
чтобы удалить все установленные драгоценные камни из gemset, вы можете его удалить:
rvm gemset empty new_gemset
чтобы скопировать гемсет из одного рубина в другой, вы можете сделать это:
rvm gemset copy 2.1.1@rails4 2.1.2@rails4
для удаления gemset:
rvm gemset delete new_gemset
для просмотра текущего имени gemset:
rvm gemset name
установить жемчужину в глобальном gemset:
rvm @global do gem install ...
Инициализация Gemsets во время установки Ruby
Когда вы устанавливаете новый рубин, RVM не только создает два gemset (по умолчанию, пустой gemset и глобальный gemset), он также использует набор редактируемых пользователем файлов, чтобы определить, какие камни для установки.
Работа в ~/.rvm/gemsets
, rvm-поиск для global.gems
и default.gems
с использованием дерева-иерархии на основе установленной рубиновой строки. Используя пример ree-1.8.7-p2010.02
, rvm проверит (и импортирует из) следующие файлы:
~/.rvm/gemsets/ree/1.8.7/p2010.02/global.gems
~/.rvm/gemsets/ree/1.8.7/p2010.02/default.gems
~/.rvm/gemsets/ree/1.8.7/global.gems
~/.rvm/gemsets/ree/1.8.7/default.gems
~/.rvm/gemsets/ree/global.gems
~/.rvm/gemsets/ree/default.gems
~/.rvm/gemsets/global.gems
~/.rvm/gemsets/default.gems
Например, если вы отредактировали ~/.rvm/gemsets/global.gems
, добавив эти две строки:
bundler
awesome_print
каждый раз, когда вы устанавливаете новый рубин, эти два драгоценных камня устанавливаются в ваш глобальный гемсет. default.gems
и файлы global.gems
обычно перезаписываются во время обновления rvm.