Создание рубинового камня для приложений Rails
Как разработчик Rails, я чувствую себя немного глупо, задавая этот вопрос, но, надеюсь, я узнаю что-то новое, и кто-то может избавить меня от моих страданий! В моих приложениях rails я использую (другие народы) драгоценные камни все время, я также использую плагины из сообщества или моего собственного.
Я понимаю преимущества использования драгоценных камней над плагинами, поскольку они доступны для версий, сегментированы, общесистемны, проще в управлении и обмениваются и т.д., но я действительно не знаю, как делать драгоценные камни для своих приложений на рельсах!
Вы всегда начинаете с плагина и конвертируете его в драгоценный камень, я видел, что слова "упаковывают его как Gem". Также драгоценный камень, который я собираюсь построить, не будет хорош в нормальной рубиновой программе, это полезно только для приложений rails. Я даже не уверен, что семантика этого имеет смысл, "RubyGem", который будет работать только в приложении rails!?
Я хотел бы создать драгоценный камень (если это то, что я должен использовать?) для дискретной части функциональности для моих приложений-рельсов. Он должен будет добавить миграцию базы данных, новые маршруты и предоставить контроллеры и представления или полезные помощники вида. Я знаю, что могу достичь этого с помощью плагина, но просто хотел бы узнать, как и почему делать это как "Ruby Gem"?
Ответы
Ответ 1
Чтобы избежать риска чрезмерной инженерии, я обычно начинаю с функции, которая мне нужна непосредственно в приложении. Затем, как только мне нужно будет использовать одну и ту же функцию в другом проекте, я проверю, стоит ли ее извлекать в плагин или даже отдельное приложение, предоставляющее API.
Плагины и драгоценные камни часто взаимозаменяемы. Драгоценные камни обеспечивают несколько существенных преимуществ с точки зрения возможности повторного использования и ремонтопригодности.
С другой стороны, есть некоторые конкретные известные проблемы. Например, приложение Rails фактически не может загружать задачи рейка, определенные в плагин, упакованный как Gem.
Почти каждый плагин Rails может быть упакован как Gem.
Например, возьмите плагин tabs_on_rails.
Вы можете установить его как Gem, определяя зависимость от environment.rb. Или вы можете использовать команду script/plugin install
, как и следовало ожидать.
Если вы хотите добиться того же результата, обязательно следуйте стандартным макетам Gem и выполните инициализацию init.rb
script, требуемую Rails.
Кроме того, вам может потребоваться создать файл install.rb
и uninstall.rb
, который будет включать в себя установочные и пост-удаленные блокировки, когда плагин будет установлен как стандартный плагин Rails.
И последнее, но не менее важное: если вы упаковываете плагин как Gem, вы можете повторно использовать его в проектах, отличных от Rails, и предоставлять инициализации, специфичные для Rails, с помощью файла init.rb
. Приложения Non-Rails просто игнорируют его.
Ответ 2
Если вы хотите создать плагин для Rails, https://peepcode.com/products/rails-2-plugin-patterns дает хорошее начало. После этого сделайте плагин в драгоценный камень.
Чтобы создать драгоценный камень, этот ресурс http://railscasts.com/episodes/183-gemcutter-jeweler будет полезен.
Ответ 3
С 2013 года вы захотите использовать Bundler и следующие уроки:
Ответ 4
Взгляните на Jeweler. Ювелир дает вам набор задач грабли, чтобы сделать управление версиями драгоценных камней и их создание очень просто.