2010-01-15 5 views
17

Как разработчик Rails, я чувствую себя немного глупо, задавая этот вопрос, но, надеюсь, я узнаю что-то новое, и кто-то может избавить меня от моих страданий! В моих приложениях rails я использую (другие народы) драгоценные камни все время, я также использую плагины из сообщества или моего собственного.Построение рубинового драгоценного камня для приложений Rails

Я понимаю преимущества использования драгоценных камней над плагинами, поскольку они доступны для версий, сегментированы, общесистемны, проще в управлении и обмениваются и т. Д., Но я действительно не знаю, как сделать драгоценный камень для своих приложений с рельсами !?

Вы всегда начинаете с плагина и конвертируете его в драгоценный камень, я видел слова «упакуйте его как драгоценный камень». Также драгоценный камень, который я собираюсь построить, не будет хорош в обычной рубиновой программе, это полезно только для приложений rails. Я даже не уверен, что семантика этого имеет смысл, «RubyGem», который будет работать только в приложении rails !?

Я хотел бы создать драгоценный камень (если это то, что я должен использовать?) Для дискретной функциональности для моих приложений-рельсов. Он должен будет добавить миграцию базы данных, новые маршруты и предоставить контроллеры и представления или полезные помощники вида. Я знаю, что могу добиться этого с помощью плагина, но просто хотел бы узнать, как и почему делать это как «Ruby Gem»?

ответ

7

Чтобы избежать риска чрезмерной инженерии, я обычно начинаю с функции, которая мне нужна непосредственно в приложении. Затем, как только мне нужно будет использовать одну и ту же функцию в другом проекте, я проверю, стоит ли ее извлекать в плагин или даже отдельное приложение, предоставляющее API.

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

Почти каждый плагин Rails может быть упакован как драгоценный камень. Например, возьмите мой плагин tabs_on_rails.

Вы можете установить его как драгоценный камень, определяющий зависимость от environment.rb. Или вы можете использовать команду script/plugin install, как и следовало ожидать.

Если вы хотите добиться того же результата, обязательно следуйте стандартным макетам Gem и предоставите сценарий инициализации init.rb, необходимый Rails. Кроме того, возможно, вы захотите создать файл install.rb и uninstall.rb, чтобы добавить крючки после установки и после удаления, когда плагин установлен как стандартный плагин Rails.

И последнее, но не менее важное: если вы упакуете плагин как Gem, вы можете его повторно использовать в проектах, отличных от Rails, и предоставить инициализацию, специфичную для Rails, с помощью файла init.rb. Приложения Non-Rails просто игнорируют его.

+0

Вы можете исправить URL на свой tabs_on_rails плагин? –

+0

Исправлено! Спасибо. –

+0

@SimoneCarletti - «Приложение Rails на самом деле не может загружать задачи рейка, определенные в плагине, упакованном как Gem» - я не думаю, что это все еще так. – Yarin

3

Если вы хотите создать плагин для Rails, https://peepcode.com/products/rails-2-plugin-patterns дает вам хорошее начало. После этого сделайте плагин в драгоценный камень.

Чтобы сделать жемчужину, этот ресурс http://railscasts.com/episodes/183-gemcutter-jeweler будет полезен.

+0

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

2

Посмотрите на Jeweler. Ювелир дает вам набор задач грабли, чтобы сделать управление версиями драгоценных камней и их создание очень просто.

Смежные вопросы