Разветвление гема для проекта Rails

Я дважды попадал в такую ​​ситуацию: я устанавливаю гем в своей системе и начинаю использовать его из своего проекта Rails. В конце концов мне нужно внести некоторые изменения в этот драгоценный камень. Как мне продолжить?

В идеале я бы хотел где-нибудь проверить исходный код этого драгоценного камня, например ~ / third_party / gems, поработать над ним и использовать его вместо этого в моем проекте Rails. Это возможно?

Во всех случаях драгоценные камни были на github, так что я бы, вероятно, для них на github, клонировал их, сделал все возможное и поддержал свою собственную ветку. Я полагаю, что тогда я бы установил эту ветку напрямую с установкой gem на свой сервер. Имеет ли это смысл?


person pupeno    schedule 17.10.2009    source источник
comment
Создание драгоценных камней на GitHub постепенно прекращается. github.com/blog/515-gem-building-is-defunct   -  person Tate Johnson    schedule 19.10.2009


Ответы (2)


Сегодня это довольно просто сделать с помощью Bundler. Вы делаете локальную копию драгоценного камня, а затем вместо того, чтобы делать

gem "whatever"

в вашем Gemfile вы делаете:

gem "whatever", :path => "/home/pupeno/whatever"

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

Если вам нужно развернуть приложение, используя ваши собственные изменения Gem, вы делаете форк на Github или аналогичном и в Gemfile вы делаете:

gem "whatever", :git => "[email protected]:/pupeno/whatever.git"

и это все. Все просто, понятно и красиво.

person pupeno    schedule 01.10.2010
comment
Это полезно, потому что в некоторых случаях есть драгоценный камень, который устарел или имеет функции, которые я хочу использовать в качестве отправной точки. Спасибо. - person Dustin M.; 27.10.2010
comment
Я предлагаю использовать общедоступный URL-адрес git. git://github.com/pupeno/whatever.git вместо частного ([email protected]:pupeno/whatever.git) в случае, если другие люди используют ваш проект и не имеют частного доступа к вашему репо. - person Amiel Martin; 18.04.2012
comment
как получить адрес github с точной версией гема? - person bgcode; 25.07.2013
comment
Чтобы использовать драгоценный камень в определенной версии, используйте :ref (или :branch, или :tag). stackoverflow.com/questions/6119946/ - person Patrick; 16.03.2014
comment
... А чтобы увидеть доступные версии в github, посетите github.com/user-name/repo-name/releases - person Patrick; 16.03.2014
comment
Вы предлагаете хранить драгоценный камень в / дома. Это плохая практика - хранить его внутри проекта рельсов, над которым вы работаете? Если нет, то какую папку мне тогда использовать? - person bo-oz; 10.12.2015
comment
Как вы затем обновляете драгоценный камень, когда обновляется исходный гем, но при этом сохраняете свои изменения? - person Adzz; 16.11.2016

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

Если вам действительно нужно взломать реальный источник драгоценного камня, тогда да, это будет способ сделать это. Однако это должно быть крайней мерой. Вы не хотите поддерживать настоящий драгоценный камень, если вам не нужно. Почему бы не расширить классы из источника гемов, функциональные возможности которых вам нужны для изменения и использования ваших классов вместо классов гемов в вашем коде Rails?

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

person Chris    schedule 17.10.2009