Ruby Language
Использование драгоценных камней
Поиск…
Установка рубиновых камней
В этом руководстве предполагается, что у вас уже установлен Ruby. Если вы используете Ruby < 1.9
вам придется вручную установить RubyGems, поскольку он не будет включен изначально .
Чтобы установить рубиновый камень, введите команду:
gem install [gemname]
Если вы работаете над проектом со списком зависимостей gem, то они будут перечислены в файле с именем Gemfile
. Чтобы установить новый проект в проект, добавьте следующую строку кода в Gemfile
:
gem 'gemname'
Этот Gemfile
используется жемчужиной Bundler для установки зависимостей, требуемых вашим проектом, однако это означает, что вам нужно сначала установить Bundler, выполнив (если вы еще этого не сделали):
gem install bundler
Сохраните файл, а затем запустите команду:
bundle install
Указание версий
Номер версии может быть указан в команде live, с флагом -v
, например:
gem install gemname -v 3.14
При указании номеров версий в Gemfile
вас есть несколько доступных опций:
- Не указан никакой версии (
gem 'gemname')
Будет установлена последняя версия, совместимая с другими драгоценными камнями вGemfile
. - Точная версия указана (
gem 'gemname', '3.14'
) - будет пытаться установить версию3.14
(и неGemfile
если это несовместимо с другими камнями вGemfile
). - Оптимистичный минимальный номер версии (
gem 'gemname', '>=3.14'
) - будет пытаться установить только последнюю версию, совместимую с другими драгоценными камнями вGemfile
, и сбой, если версия, более или равная3.14
не совместима. Можно также использовать оператор>
. - Пессимистический минимальный номер версии (
gem 'gemname', '~>3.14'
). Это функционально эквивалентно использованиюgem 'gemname', '>=3.14', '<4'
. Другими словами, разрешено увеличивать только число после последнего периода .
Как наилучшая практика : вы можете использовать одну из библиотек управления версиями Ruby, таких как rbenv или rvm . С помощью этих библиотек вы можете установить разные версии Ruby runtimes и gems соответственно. Таким образом, при работе в проекте это будет особенно удобно, потому что большинство проектов кодируются с известной версией Ruby.
Установка Gem из github / файловой системы
Вы можете установить gem из github или файловой системы. Если драгоценный камень был извлечен из git или как-то уже в файловой системе, вы можете установить его с помощью
gem install --local path_to_gem/filename.gem
Установка gem из github. Загрузите источники из github
mkdir newgem
cd newgem
git clone https://urltogem.git
Построить драгоценный камень
gem build GEMNAME.gemspec
gem install gemname-version.gem
Проверка того, установлен ли требуемый камень из кода
Чтобы проверить, установлен ли требуемый камень, изнутри вашего кода вы можете использовать следующее (используя пример nokogiri):
begin
found_gem = Gem::Specification.find_by_name('nokogiri')
require 'nokogiri'
....
<the rest of your code>
rescue Gem::LoadError
end
Однако это может быть расширено до функции, которая может использоваться при настройке функций внутри вашего кода.
def gem_installed?(gem_name)
found_gem = false
begin
found_gem = Gem::Specification.find_by_name(gem_name)
rescue Gem::LoadError
return false
else
return true
end
end
Теперь вы можете проверить, установлен ли требуемый камень, и распечатать сообщение об ошибке.
if gem_installed?('nokogiri')
require 'nokogiri'
else
printf "nokogiri gem required\n"
exit 1
end
или же
if gem_installed?('nokogiri')
require 'nokogiri'
else
require 'REXML'
end
Использование Gemfile и Bundler
Gemfile
- это стандартный способ организации зависимостей в вашем приложении. Основной Gemfile будет выглядеть так:
source 'https://rubygems.org' gem 'rack' gem 'sinatra' gem 'uglifier'
Вы можете указать версии требуемого камня:
# Match except on point release. Use only 1.5.X gem 'rack', '~>1.5.2' # Use a specific version. gem 'sinatra', '1.4.7' # Use at least a version or anything greater. gem 'uglifier', '>= 1.3.0'
Вы также можете вытащить драгоценные камни прямо из репозитория git:
# pull a gem from github gem 'sinatra', git: 'https://github.com/sinatra/sinatra.git' # you can specify a sha gem 'sinatra', git: 'https://github.com/sinatra/sinatra.git', sha: '30d4fb468fd1d6373f82127d845b153f17b54c51' # you can also specify a branch, though this is often unsafe gem 'sinatra', git: 'https://github.com/sinatra/sinatra.git', branch: 'master'
Вы также можете группировать драгоценные камни в зависимости от того, для чего они используются. Например:
group :development, :test do # This gem is only available in dev and test, not production. gem 'byebug' end
Вы можете указать, на какой платформе должны работать определенные камни, если приложение должно работать на нескольких платформах. Например:
platform :jruby do gem 'activerecord-jdbc-adapter' gem 'jdbc-postgres' end platform :ruby do gem 'pg' end
Чтобы установить все драгоценные камни из Gemfile, выполните следующие действия:
gem install bundler bundle install
Bundler / inline (bundler v1.10 и более поздние версии)
Иногда вам нужно сделать сценарий для кого-то, но вы не знаете, что у него на машине. Есть ли все, что нужно вашему сценарию? Не беспокоиться. Bundler имеет большую функцию, называемую в строке.
Он предоставляет метод gemfile
и перед запуском скрипта загружает его и требует всех необходимых драгоценных камней. Маленький пример:
require 'bundler/inline' #require only what you need
#Start the bundler and in it use the syntax you are already familiar with
gemfile(true) do
source 'https://rubygems.org'
gem 'nokogiri', '~> 1.6.8.1'
gem 'ruby-graphviz'
end