Можете ли вы?
Да
Если вы?
Абсолютно нет.
Почему?
- Изменениеисточник драгоценных камней делает очень сложным обновление до новых версий гема
- Гораздо сложнее отлаживать проблему
- Это вызовет ОГРОМНУЮ головную боль
- Это делает еготрудно работать в среде совместной работы (есть ли у каждого разработчика правильный взломанный драгоценный камень?)
- Это вызывает такие вопросы (например, где я должен взломать драгоценный камень?)
Решения
Есть несколько способов решить эту проблему:
Отправить исправление
Если вы считаете, что это «изменение» принесет пользу всему сообществу,найдите исходный код (скорее всего, на github ), разветвитесь, примените патч, напишите тесты и отправьте pull-запрос.Если разработчик согласится с тем, что ваш патч жизнеспособен, он будет объединен с проектом и выпущен со следующей версией гема.
Преимущества - Вы помогаете сообществу
- У вас есть локальная копия драгоценного камня (так как вы его разветвили) на компьютере разработчика
Недостатки - Вам нужно подождать, пока разработчик примет ваш патч
- Это может занять довольно много времени
Re-Gem
Если вы не думаете, что это принесет пользу всему сообществу, но вы все еще хотите позволить другим разработчикам систематически использовать этот драгоценный камень, раскошелиться на существующий драгоценный камень, применить свойисправьте, переименуйте драгоценный камень и опубликуйте.в этом случае хорошей практикой является добавление префикса к вашему оригинальному самоцвету.Например, если камень был назван foo
, вы бы назвали свой камень foo-my-company
.Теперь вы можете выбрать этот драгоценный камень с открытым исходным кодом (push to rubygems) или отправить его на частный сервер разработки в вашей организации. Вы по-прежнему должны указывать автора оригинального драгоценного камня в своем обновлении!
Преимущества - Не нужно ждать разработчика
- Центральная база кода
- Легко используется
Недостатки - Сложно обновить с оригинального гема
- Может быть громоздким в обслуживании
Local Lib (monkey-patch)
Вы можете создать monkey-patch внутри вашего приложения и переопределить любые методы или свойства, которые не соответствуют вашей текущей среде.
Преимущества - Быстро и просто
- Легко делится (через git - просто включите файл патча в репо)
Недостатки - Обновление драгоценного камня затруднено
- Другим разработчикам не ясно, что вы модифицируете ядро драгоценного камня
- Труднее отладить (это ошибка с драгоценным камнем или вашпатч?)
Форк и источник
Это мой рекомендуемый вариант.Почему я поставил это в последнюю очередь - другие встречаются чаще.В этом методе вы разветвляете гем из его исходного репозитория (возможно, на github), а затем получаете свой камень из вашего git репо.Например, скажем, драгоценный камень был назван foo
, вы бы разветвлялись от foo
до username/foo
на github.Применяйте свои патчи, изменения, что угодно.Затем в вашем Gemfile:
gem 'gem_name', :git => 'git://github.com/username/foo'
Это установит и скомпилирует гем из источника в вашем репо при каждом запуске команды bundle.Вы также можете указать конкретный тег и ветку (рекомендуется для стабильности).
Преимущества - Вы можете легко обновить апстрим (у вас есть форк - вытащить из апстрима, объединить, у вас есть все изменения)
- Контроль версий прост (используйте теги и ветки для разных версий)
- Каждый имеет доступ к одному и тому же источнику самоцветов
- Простота управления обновлениями
Недостатки - Ваш "пользовательский" код является общедоступным (хотя для решения этой проблемы вы можете использовать собственный сервер git вместо github)
Заключение
У каждого метода есть свои преимущества и недостатки (которые я старался перечислить как можно лучше).В любом случае, предложенный вами метод является , а не рекомендуемым методом для решения этой проблемы.
Если у читателей есть комментарии о других преимуществах / недостатках, перечислите их, и я добавлю их в свой ответ.