Pikap24.ru

Автомобильный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Что такое двигатель gem

Rails 4 Engines. Разработка gem’а через mountable engine — читаем логи сервера


Так уж случилось, что возникло непреодолимое желание написать свой Rails gem. Во-первых, академический интерес — такого еще не делал, во-вторых, назрела проблема, решение которой важно лично для меня и которое хотелось бы использовать в нескольких своих проектах.

На Хабре уже были статьи про создание gem’ов (раз два три)

Но на их основе создать полноценный gem нельзя — они сильно устарели и, как правило, представляют собой перевод скупой официальной документации. А главное, они в большей части описывают создание Readme и License файлов, а собственно функционал gem’a сводится к Hello World.

Проблема

«Sorry, but something went wrong.
If you are the application owner check the logs for more information.»

Ну а дальше — ssh к серверу, cd к папке приложения и раскопка логов. Что бы ни говорили поклонники vim и emacs, но пытаться найти что-то в логе с их помощью — то еще занятие. Проще уж запустить tailf и пытаться найти руками. Есть еще rmate, но у меня он как-то не прижился.

Сразу покажу, что получилось в итоге:

Все, что нужно, это прописать в Gemfile

и смонтировать его ( config/routes.rb ) в нужную точку приложения, например

После этого на вашем сервере

Если в приложении используется Devise, то нужно будет сначала ввести логин и пароль.

Как делать

Обычно для таких случаев используют sinatra-based gem’ы (например)
Лично я для своего gem’a не вижу в этом смысла, поскольку использую Rails и нет необходимости в синатре.

Для начала имеет смысл написать собственно приложение, которое впоследствии будет превращено в отдельный gem.
В моем случае оно будет состоять из одного конроллера и одного экшена:

Все просто, используем один Singleton класс, который выдает заданное количество строк из заданного .log файла. Сам класс Log интереса не представляет. Разве что сам способ получения лога:

Ruby нативно позволяет выполнить команды ОС, просто заключив ее в вот эти (хрен его знает, как они правильно называются) символы: `tail -n 40 production.log` — вернет последние 40 строк из файла.

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

Одна строчка JavaScript (известный фреймворк — Vanilla.js) прокручивает экран вниз, к последней строке:

Делаем gem из приложения.

Статьи на Хабре и уважаемый Ryan Bates описывали создание gem’a с помощью команды bundle gem. Последнее видео датируется ноябрем 2011 года.
Сейчас же создение Rails gem’ов рекомендуется делать через engines.

Engine — это по сути еще одно Rails приложение, которое будет запущено вместе с исходным и использующее (взаимно) его ресурсы. Сиамские близнецы, в общем. Или имплантанты, как кому больше нравится. В приложении-родителе указывается точка подключения нового engine/plugin/gem и далее по этому адресу доступна вся функциональность нового приложения. Объяснение примитивное, на пальцах, кому интересны подробности — я указал ссылки внизу.

Читать еще:  В турбо субару заливают двигатель

Таким образом достаточно удобно реализовывать всяческие админки, gem’ы статистики, наблюдения за активностью и пр. В общем все то, что, с одной стороны, относительно независимо и не так тесно переплетается с основным приложением, а с другой стороны, задействует полную функциональность Rails — модели, контроллеры, представления и т.п.
В противном случае надо будет серьезно попотеть с порядком инициализации приложений, миграциями, разграничением доступа, безопасностью и т.п. Головняк тот еще, но нет ничего невозможного. Кому интересно — можно начать с вот этой статьи

Для gem’ов, работающих только с ограниченной функциональностью Rails (например создающих новый хелпер или фильтр контроллера) — лучше использовать плагины

Итак, создаем будущий gem с именем tail

Ключ —mountable собственно и отделяет создание mountable engine от относительно простого плагина.

Очень забавная команда. Если посмотреть на структуру папок, созданную в результате, то это будет смесь обычного Rails приложения и результата команды bundle gem .

Три основных момента:

Первое

папка lib будет основой будущего gem’a и самый главный файл в нем — engine.rb

Создается модуль с именем gem’a с изолированным пространством имен, в который будут завернуты все ваши модели, контроллеры, вьюхи и классы. Т.е. вместо класса SomeClass у вас будет Tail::SomeClass , то же самое с routes и путями — вместо, например, messages_path вы будете писать tail.messages_path , если нужно будет попасть в веб-часть gem’a.
Само-собой, это делается для того, чтобы исключить конфликты имен gem’a и приложений, куда он будет монтироваться.

Обратите внимание на структуру папок app/ в приложении: в каждую из них добавлена дополнительная подпапка с названием gem’a, к которую складываются нужные файлы. Влияет на пути к файлам и хелперам.

Второе,

файл .gemspec — кроме описания песональной информации в нем содержится список зависимостей от других gem’ов и список файлов, необходимых для сборки.

lib/version.rb — номер версии gem’a. Рекомендуется использовать нотацию, описанную в semver.org. Простая штука, но обращаю на нее внимание, потому что очередная публикация gem’a без изменения версии не допускается.

И третье:

Наполняем gem

Не использую scaffold, поскольку нет необходимости в CRUD и генерации представлений.

Переношу в сгенерированные файлы код из существующих классов. Стоит убедиться, что все работает, запустив фейковое приложение из test/dummy .

Читать еще:  Этапы работы четырехтактного двигателя

Всё, с этого момента gem можно подключать и отлаживать в другом приложении:

Главное не забывать обновлять файл с версиями и делать bundle update tail в приложении, использующим gem после каждого изменения.

Публикация

Чтобы опубликовать gem на rubygems, нужно зарегистрироваться там.

После этого в папке gem-проекта
Для сборки gem

в создании gem’a не участвует, просто это легкий способ указать rubygems credetnials для релиза. Нужно ввести только один раз.

Сразу после этого gem появится в поиске на rubygems и станет доступным через gem install для других разработчиков.

Итого

1. Чтобы создать mountable Rails gem, нужно сделать следующее:
создать скелет

2. Наполнить его привычным Rails приложением
Есть незначительные особенности, но их мало и они хорошо описаны
Очень просто посмотреть, что же вы сделали, запустив rails server в папке test/dummy/

4. Зарегистрироваться на rubygems.org и указать свои логин и пароль:

Вот и всё, вы счастливый обладатель собственного gem’a

К слову сказать, на момент публикации rubygems утверждает, что мой gem скачали уже 151 раз. Не очень верится, но приятно.

Вообще при разработке упор делался на простоту установки и использования — ничего лишнего. Совсем. Хотя есть и другие варианты — например, gem webtail отправляет содержимое лога в сокет и, соответственно, можно смотреть изменения логов в реальном времени. Меня такая реализация не устраивает, хотя бы потому, что нужна дополнительная пляска с фаерволами. Хотя красиво.

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

bot.kz — Новости IT

С Rails 3 была выпущена, разработчики писали Rails двигателей в новых чистых стилей, которые могут быть упакованы в RubyGems.Rails двигатель расфасованный приложение, которое может быть запущен или установлен в другом приложении Rails.Двигатель может иметь свои собственные модели, представления, контроллеры, генераторов и публично подают статические files.

(Изображение: maicos)

Теперь, если вам не нравится писать много кода, это хорошая новость, потому что это означает, что вы можете написать двигатель раз и использовать его снова и снова.Допустим, вы строите много веб-сайтов для малого бизнеса.Общее требование для таких веб-сайтов страницу со списком всех сотрудников компании, а также основные сведения о них.Это отличный кандидат на Rails жемчужина двигателя по причине того, изменится очень мало, и можно абстрагировать, общий набор requirements.

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

Читать еще:  Горит датчик неисправности двигателя нексия

Enginex

Jose Valim, основной вклад Rails, создала инструмент под названием Enginex, что строительные леса Rails 3-совместимый драгоценных камней двигателя.Эта программа защищает вас от многих подводных камней, что разработчики двигателя жемчужина лицу.Он обеспечивает основные настройки, в том числе тестового приложения Rails, который вы должны будете получить started.

Для начала выполните следующие из командной строки в стандартный каталог проектов:

При этом, вы будете в конечном итоге с проектом в team_page каталог, содержащий стандартный Enginex scaffolding.

Set-Up

Чтобы настроить нашу жемчужину, мы будем модифицировать несколько файлов.Во-первых, наши team_page.gemspec и наши Gemfile нужно немного love.

Это настраивает наш gemspec, чтобы автоматически использовать файлы, которые мы совершили с Git, и любые исполняемые файлы можно добавить в будущем, и использовать VERSION константа, мы укажем в нашем gem.

Кроме того, по телефону gemspec в наших Gemfile , работает bundle install будет загружать зависимости от наших team_page.gemspec , что convention.

След, чтобы наш драгоценный камень в двигателе Rails, давайте добавлять или изменять трех файлов.Во-первых, наши верхнего уровня команды страницу файла:

Для mattr функций, наш ActiveSupport зависимостей требуется.Мы также создали хороший способ настроить наш драгоценный камень с self.setup метод.Двигатель должен в конце нашего файла, так что мы можем быть уверены, что любая зависимость указанных first.

Во-вторых, наш вариант файла:

Наконец, наш двигатель файла:

Это определяет два Rails initialize блоки, которые нам ключ в корневом каталоге с приложением хост Rails, а также выполнять любые файлы в корневой public каталог нашей gem.

Data Model

Для добавления модели в нашу жемчужину, мы в первую очередь необходимо указать миграции и генератор класса, чтобы скопировать его на хост-приложения Rails.Хотя этот процесс станет более прозрачным в Rails 3.1, теперь нам нужно построить несколько генераторов классов.Большой ресурс для этого можно найти по меньшей Непал Rails.

Во-первых, давайте добавим наши генераторы класса:

Добавление что это позволит разработчикам запускать rails g team_page из своих приложений Rails и создать необходимый файл миграции к власти нашей команды page.

Следующее, мы собрали образцы миграции:

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

Что мы сделали до сих пор является прошел через шаги для начальной загрузки Rails 3 двигателя драгоценный камень.Это был сконфигурирован как двигатель, учитывая его собственный генератор миграции, и поставляется с ActiveRecord model.

Теперь давайте настроим наш драгоценный камень с маршрутом, контроллер и представление, что любой хост-приложения Rails может use.

Route

Rails двигателей драгоценных камней, при правил� …

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector