Меню Рубрики

Установка гемов для rails

Библиотеки

Как и в большинстве языков программирования, в Ruby можно использовать широкий набор сторонних библиотек.

Большая часть из них реализована в форме гема. RubyGems – менеджер пакетов Ruby, созданный для упрощения процесса создания, распространения и установки библиотек (в каком-то смысле это распределенный пакетный менеджер, похожий, скажем, на apt-get , но нацеленный на Ruby приложения). С версии Ruby 1.9 RubyGems используются по умолчанию, хотя для предыдущих версий его нужно было устанавливать вручную.

Некоторые другие библиотеки реализованы как архивы (.zip или .tar.gz) исходного кода. Процесс установки может различаться, обычно файл README или INSTALL содержит инструкции по установке.

Давайте взглянем на поиск библиотек и установку их для дальнейшего использования.

Поиск библиотек

Основное место, где хранятся библиотеки — RubyGems.org, предоставляет библиотеки Ruby в виде гемов. Вы можете поискать прямо на сайте или воспользоваться командой gem .

Используя команду gem search -r , вы можете проверить репозиторий RubyGems. Например, gem search -r rails вернет список относящихся к Rails библиотек. С опцией —local ( -l ) вы можете произвести локальный поиск среди установленных у вас гемов. Чтобы установить гем, используйте gem install [gem] . Просмотреть список установленных библиотек можно командой gem list . Для более подробной информации о команде gem смотрите ниже или почитайте документацию RubyGems.

Также есть и другие источники библиотек. RubyForge был популярным домом для библиотек Ruby, но в последний год возросла популярность GitHub, как одного из главных хранилищ исходного кода приложений околорубиевой тематики. Намного чаще сейчас исходный код гема размещен на GitHub и сам гем опубликован на RubyGems.org.

The Ruby Toolbox это проект, который позволяет легче исследовать проекты на Ruby с открытым исходным кодом. Там есть категории для различных проблем разработки, содержащие большое количество информации о проектах, вроде даты релиза и активности разработчиков, а также зависимости и рейтинг проекта, основанный на его популярности на RubyGems.org и GitHub.com. Поиск поможет быстрей найти то, что вы ищете.

Еще пару слов о RubyGems

Это был краткий обзор команды gem для вашего повседневного использования. Более подробная документация также доступна, она покрывает все аспекты данной пакетной системы.

Поиск среди доступных гемов

Команда search может быть использована для поиска гемов по названию. Гемы, название которых начинаются с заданной строки, будут отображены в результатах. Например, чтобы найти гемы, относящиеся к “html”:

Флаг —remote / -r показывает, что мы хотим проверить официальный RubyGems.org репозиторий (поведение по-умолчанию). С флагом —local / -l вы можете совершить локальный поиск среди установленных у вас гемов.

Установка гема

Когда вы знаете, какой гем вы желаете установить, например, популярные Rails:

Вы даже можете установить определенную версию библиотеки. Просто используйте флаг —version / -v :

Список всех гемов

Для просмотра всех локально установленных гемов:

Чтобы получить (очень длинный) список всех гемов, доступных на RubyGems.org:

Документация

Документация доступна в вашем терминале:

Например, gem help commands очень полезна, выводит список всех подкоманд команды gem .

источник

Почти полное руководство по написанию Ruby гемов

Доброго времени суток, user.

Не так давно у меня возникла задача сделать прототип для одного проекта. В него входила работа с Facebook Graph API. Поковыряв некоторые гемы, я понял, что они для меня не совсем удобные или же реализуют нужный функционал уж слишком сложно. И тут в моей голове всплыла старая идея о написании своего гема. Загуглив массу запросов по этой теме, не нашел полной информации, тем более на русскоязычных ресурсах. Вот так и возникла идея этой статьи. Руководство названо «почти полным», так как тут освещены не все аспекты, а лишь те, которые минимально необходимы и желательны для начала существования продукта вашего воображения. Прошу под кат!

Начнем с базового (спасибо Википедии):

RubyGems (от англ. gem, gems— драгоценный камень) — система управления пакетами для языка программирования Руби который предоставляет стандартный формат для программ и библиотек Руби (в самодостаточном формате «gems»), инструменты, предназначенные для простого управления установкой «gems», и сервер для их распространения.

NOTE: Прошу учесть, что именно RubyGems, а не RailsGems или RoRGems. Это значит, что гемы пишутся непосредственно на чистом и блестящем Ruby, а то, что помечено как Rails Gem — всего лишь Ruby Gem, но использующий, либо дополняющий Rails (кстати, кто не в курсе, Rails — тоже Ruby Gem).

Я использую для разработки IDE от JetBrains — RubyMine (v6.3). В основном из-за удобного autocomplete и интеграции с Git, SFTP и других плюшек. Поэтому все махинации буду показывать именно в этой IDE. Для приверженцев Sublime/Vim/Emacs + Terminal есть куча инструкций по генерации gem-темплейтов через консоль.

Читайте также:  Установка phpbb на jino

Я являюсь создателем, пускай пока сыроватого, но функционирующего гема Fobos (current v0.0.6). Все познания я взял из процесса его разработки.

Шаг 1: Создание болванки

В RubyMine это выглядит как создание нового проекта, но с выбором Poject Type: Ruby Gem.

Далее будет выбор версии Ruby. Что, в принципе, ясно и не требует объяснения.

В итоге получаем проект с такой структурой (я убрал галочки для создания bin и test директорий).

Рассмотрим по порядку всю структуру.

  • lib — непосредственно хранит весь код (ну или почти весь) вашего приложения;
  • .gitignore — хранит список файлов и папок, которые не должны попасть под контроль версий (файлы бд, скомпилированные ассеты, логи и т.п.);
  • Gemfile, Gemfile.lock — список других гемов, которые вы используете для работы или при разработке изображения. Но в случае гема они недоступны, т.к. они указываются в файлу *.gemspec;
  • LICENSE.txt — хранит лицензию использования. В моем случае — это MIT;
  • Rakefile — хранит Rake таски. Подробнее можно легко найти в интернете;
  • REAMDE,md — «лицо» вашего приложения. Выводится на стартовых страницах GitHub и RubyDoc;
  • SomeCoolGem.gemspec — некоторый манифест, в котором хранится основная информация и зависимости приложения.

Шаг 2: создание структуры для работы приложения

Теперь будем работать непосредственно с директорией lib.
Файл SomeCoolGem.rb является стартовым. По идее в нем должна храниться вся логика, но, как показывает практика, гораздо целесообразней создать модуль и разделить приложение на классы по функциональности, а затем просто подгружать их в этот файл. Для тех, кто знаком с языками C++/Java/C# — этот файл чем-то сродним методу main().

Сразу создадим модуль HelloWorld. И в нем создадим сласс Alloha.

Так как весь гем, по сути, есть модуль то уже в файле SomeCoolGem.rb будет следующий код:

Вот так изменилась структура проекта:

Шаг 3: Делаем нужный функционал

Добавим в класс Alloha поле, конструктор и какие-нибуль методы для демонстрации:

Шаг 4: Проверяем работоспобность

Так как гем — это модуль, то использовать мы его можем тоже как модуль. Для проверки я обычно использую IRB.

Как видим, мало чем отличается от работы обычно проекта. Грубо говоря, при использовании гема ваше приложение просто подключает модуль с вложенными модулями/классами и вы можете использовать их как и обычные модули/класссы Ruby.

Шаг 5: Подключаем все к главному файлу

Для этого нужно немного изменить наш стартовый файл SomeCoolGem.rb:

Теперь при указании нашего гема в Gemfile приложения мы сможем использовать его как обычный модуль Ruby.

Шаг 6: Сборка гема и его версионизация

В файле version.rb хранится текущая версия нашего гема:

Перед каждым релизом нужно будет менять это значение.

Сразу скажу, что если вы делаете новый коммит, то не обязательно менять версию. Однако если меняется логика программы, то лучше сделать релиз.

Чтобы собрать версию гема, вам нужно выполнить команду:

В корне проекта появится файл SomeCoolGem-0.0.1.gem.

Поздравляю. Первая версия гема собрана!

Шаг 7: Пушим гем

Подробная и свежая инструкция всегда лежит здесь.

Так же поный набор инструкций находится здесь.

Там все хорошо и подробно описано.

Шаг 8: Просветление

Теперь я бы хотел поговорить о некоторых плюшках, которые многим интересны.

1. Можно проапдейтить профиль гема на RubyGems. Там есть настройки, в которых можно добавить описание, линки и прочее.
2. Бейджи. Бейджи заслуживают отдельной небольшой темы. Но в двух словах — это обычные картинки, которые вы вешаются в ваш README файл. Они отображают статус пройденных тестов на различных сервисах. Например, проверка чистоты кода. Более подробно можно прочитать здесь.
3. README файл вы должны составлять сами. Старайтесь указывать, какие версии с какими совместимы или нет. Если были сделаны глобальные изменения или закрыта часть старого функционала, меняйте не минорную версию, а постарше, в зависимости от глобальности изменений.
4. Описывайте качественную документацию. Зачастую именно от нее зависит желание использовать вашу наработку или нет.
5. Старайтесь реализовывать функционал с минимальными зависимостями от других гемов и следите за тем, чтобы использовать новые версии в своих наработках.

На этом, пожалуй, все. Удачи всем тем, кто начинает свой путь в этом направлении. Буду рад критике и уточнениям.

UPD:
Уделяйте больше времени файлам *.gemspec и README.

Для редактирования *.gemspec файла можно почитать статью вот здесь

Так же учтите, что все гемы, которые вы используете в своем приложении должны быть указаны тоже в файле *.gemspec

источник

Установка Ruby on Rails под Windows

Заинтересовал меня Rails. Купил пару книг, прочитал… достаточно чтобы, зачесались руки и пришло время ставить сабж. И приступать… хотя бы к экспериментам.

Читайте также:  Установка противотуманных фар на калину норма

Задача: поставить Rails под Windows 7 (не спрашивайте меня почему) и запустить сервер.

Оказалось — это квест. Пары щелчков мышью недостаточно. Конечно, если не использовать Railsinstaller, на что мне правильно намекнули в комментариях (спасибо, dreamfall).

Несколько же часов моих поисков, завершившихся таки полной и безоговорочной инсталляцией, под катом.

1. Ставим Ruby. Строго отсюда rubyinstaller.org/downloads. Ибо тут он собран под gcc MinGW 32, который будет использоваться и для сборки ruby-модулей
1.1 Нам понадобиться версия 187. Версия 192 треует более мощного шаманства, на которое у меня маны не хватило.
1.2 Ставим Development Kit (он нам понадобиться, чтобы собрать Rails), распаковывая прямо поверх каталога Ruby (если ставили по умолчанию — это C:\Ruby187, в дальнейшем обзовем его $Ruby)
1.3 Можно заодно и документацию по Ruby скачать

2. Нам понадобиться SQLite www.sqlite.org. Архив c dll-кой и def файлом распаковываем прямо в каталог $Ruby\bin. Это кстати был первый сюрприз (раньше RDBMS «по умолчанию» был mySQL)

3. Запускаем Comand Prompt wiht Ruby (вы найдете его в start-меню windows)

4. В comand prompt ставим модули:
4.1. gem install sqlite3-ruby — SQLite
4.2. gem install rails — собственно сами «рельсы». Возможно, что установка прервется с ошибкой, в этом случае повторяем команду
4.3. Даже если ошибки не случилось, всё равно потребуется шаманство. Ибо, на каждый наш чих, будет вылезать вот такое непотребство:
Invalid gemspec in [C:/Ruby187/lib/ruby/gems/1.8/specifications/json-1.6.1.gemspec]: invalid date format in specification: «2011-09-18 00:00:00.000000000Z».
Это ошибка связанная с форматом даты. Лечится просто. Переходим в каталог $Ruby\lib\ruby\gems\1.8\specifications и в файлах «с ошибкой» меняем строчку
s.date = %q <2011-09-18 00:00:00.000000000Z>
на
s.date = %q <2011-09-18>
4.4. Для успокоения совести gem update rails —include-dependencies

5. Создаем тестовое приложение. Там же, в Command prompt
5.1 Переходим в каталог «для игр» например cd \test (или mkdir \test;cd \test — если такого каталога нет)
5.2 Создаем приложение rails new hello. Второй сюрприз — в книжках ничего не говорилось про «new».
5.3 Запускаем наше приложение. cd hello; rails server . И последний сюрприз — в тех же книжках ссылка на несуществующий больше скрипт rails server/script
5.4 по адресу localhost:3000 внезапно мы обнаруживаем наше долгожданное приложение.

Продолжение воспоследует, если по мере углубления обнаружатся еще подводные камни.

источник

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 , чтобы подключить его. Т.е. работа с гемами не отличается от работы с обычными библиотеками.

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)

Тут доступны ещё несколько трюков:
gem ‘builder’ , ‘> 1’ — использовать версию больше чем первую
gem ‘builder’ , »>= 2.2.0′, ‘ — использовать версию больше 2.2.0 и меньше 3.0
Полный список выражений:
= идентичная версия
!= неидентичная версия
> версия больше чем
= большая и равная версия
примерно больше чем (подробнее RubyGems docs)

источник

5 гемов на все случаи жизни

В блоге про Django я периодически вижу посты с обзорами интересных расширений для этого фреймворка. Идея мне понравилась, и я решил, что было бы неплохо сделать похожий цикл заметок и о Ruby on Rails.

За последние 9 месяцев работы с RoR у меня накопился небольшой список гемов, которые существенно упрощают жизнь разработчику, и которые я бы мог посоветовать для решения тех или иных задач. В этой статье я хочу рассказать о пяти из них.

foreigner

Небольшой, но очень полезный гем для создания внешних ключей у таблиц. Он добавляет к миграциям два новых метода — add_foreign_key и remove_foreign_key.

Так, например, если нужно добавить ключ от таблицы comments к таблице users, нужно сделать следующее:

pacecar

Довольно интересный гем от ребят из thoughtbot. Суть его в том, что он анализирует модель, к которой вы его подключаете, и на основе этого анализа добавляет различные scope-методы.

Предположим, у вас есть модель Post, у которой есть поля в таблице: title, content, created_at, updated_at. И есть связь has_many :comments. Добавим Pacecar в нашу модель:

После этого нам станут доступны, например, такие скоупы:

Гем добавляет довольно много полезных методов, более подробно можно ознакомиться на Github.

settingslogic

Существует довольно большое кол-во гемов, решающих проблему настроек в приложении. Cамой удачной, на мой взгляд, реализацией, является Settingslogic от небезызвестного Бена Джонсона. Простой, легковесный, использует YML-файл.

Автор гема предлагает использовать класс Settings и хранить его рядом с моделями (app/models/settings.rb).

Файл настройками в данном случае хранится в config/application.yml:

Настройки будут вызываться относительно текущего Rails-окружения. Обращаться к ним мы можем через класс Settings.

letter_opener

Гем-заглушка за авторством Райна Бейтса, без которого я уже никак не могу обходиться. Смысл работы крайне прост — мы указываем в конфиге приложения (например, в config/enviroments/development.rb), что в качестве способа доставки почты хотим использовать letter_opener.

После этого вся исходящая почта начинает складываться в папке /tmp/letter_opener, а каждое письмо после сразу после отправки открывается в новой вкладке браузера. Просто и удобно.

immortal

Гем от разработчиков Teambox, который позволяет вместо удаления записи помечать ее как ‘deleted’. Бывает очень полезно, если мы хотим оградить неосторожного пользователя от потери данных.

Для использования гема нужно добавить поле deleted к таблице, записи которой хотим сделать «бессмертными»:

Затем подключить его в нужной модели:

Теперь каждая запись в модели Task вместо полного удаления из бд будет помечена как удаленная.

источник

Добавить комментарий