Rozwidlenie klejnotu dla projektu Rails

Znalazłem się dwa razy w tej sytuacji: instaluję gem na moim systemie i zaczynam go używać z mojego projektu Rails. W końcu muszę dokonać pewnych zmian w tym klejnocie. Jak mam postępować?

Najlepiej byłoby sprawdzić kod źródłowy tego klejnotu gdzieś, na przykład ~ / third_party / gems, popracować nad nim i niech mój projekt Rails użyje go zamiast tego. Czy to możliwe?

We wszystkich przypadkach perełki były na GitHubie więc pewnie bym za to na GitHubie sklonował, zaryzykował i utrzymuj swój własny oddział. Przypuszczam, że wtedy zainstalowałbym tę gałąź bezpośrednio z gem install na moim serwerze. Czy to ma sens?

Author: pupeno, 2009-10-17

2 answers

Dzisiaj jest to dość łatwe do zrobienia z Bundlerem. Robisz lokalną kopię klejnotu, a następnie zamiast robić

gem "whatever"

W Twoim Gemfile robisz:

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

Po uruchomieniu instalacji pakietu, gem jest wybierany z tego katalogu. Nawet jeśli coś tam zmodyfikujesz, wszystko, co musisz zrobić, aby ponownie załadować to restart Rails.

Jeśli chcesz wdrożyć aplikację za pomocą własnych zmian Gem, robisz fork, na Github lub podobne i na Gemfile jesteś do:

gem "whatever", :git => "[email protected]:/pupeno/whatever.git"
I to wszystko. To proste, proste i piękne.
 96
Author: pupeno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-01 09:46:51

We wszystkich przypadkach klejnoty były na GitHubie, więc pewnie bym za to na GitHubie sklonował, zaryzykował i utrzymał własną gałąź. Przypuszczam, że wtedy zainstalowałbym tę gałąź bezpośrednio z gem install na moim serwerze.

Jeśli naprawdę potrzebujesz zhakować źródło klejnotów, to tak, to byłby sposób, aby to zrobić. Powinno to jednak być ostatecznością. Nie chcesz utrzymać prawdziwego klejnotu, jeśli nie musisz. Dlaczego nie rozszerzyć klas ze źródła gem, którego funkcjonalność musisz zmienić i używać swoich klas zamiast klas gem w kodzie Rails?

Uważam, że to rzadkie, że rzeczywiście trzeba włamać kod 3rd party bezpośrednio zrobić to, co trzeba zrobić. Dobre oprogramowanie można rozbudowywać/w łatwy sposób rozbudowywać.

 5
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-17 18:07:12