Jak sprzedawać klejnoty dla Rails3/Bundler

W Rails 2.X, mógłbym po prostu skopiować gemy do vendor/gems/gem_name, lub użyć komendy rake rake gems:unpack. Ponieważ Rails3 używa bundlera, wydaje się, że już nie działa. Znalazłem polecenie bundle package, ale nie działa tak samo.

Edit:

Więc, żeby trochę rozwinąć ten temat:

Sposób, w jaki rails 2 działał, mogłem łatwo grep znaleźć rzeczy w vendor/gems. Jeśli są spakowane w .gem pliki, nie jest to możliwe. Ponadto, podczas opracowywania klejnotu / wtyczki, bardzo pomocne jest umieść go w aplikacji rails, aby przetestować go w kontekście. Jak zrobić takie rzeczy z bundler / rails3? Czy mój przepływ pracy jest w jakiś sposób zepsuty?

Author: troelskn, 2010-09-05

6 answers

Odpowiadając na drugą część twojego pytania, rozwijając wtyczkę / gem i wysyłając go za pomocą aplikacji rails bez udostępniania gem publicznie, możesz to zrobić

Gemfile

gem 'my_private_gem', :path => "vendor/gems/my_private_gem-VERSION"

Zakładając, że wykonałeś gem unpack my_private_gem --target vendor/gems

Uwaga: pakiet bundle rozpakowuje wszystkie klejnoty (tyle ile w Gemfile.lock). Nie chciałbym tego w git.

 106
Author: oma,
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
2012-07-26 09:41:26

Odpowiednikiem Bundlera jest bundle package. Pakuje wszystkie .pliki klejnotów określone w pliku klejnotów do vendor/cache, aby przyszłe instalacje pobierały klejnoty z tego bufora, a nie z http://rubygems.org/

 27
Author: John Topley,
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-09-05 17:04:14

Odpowiednikiem Bundlera jest bundle install --deployment. Spowoduje to zainstalowanie klejnotów w stanie rozpakowanym w vendor/bundle.

 22
Author: Matijs van Zuijlen,
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
2011-02-11 10:18:39

To mi się udało:

gem unpack <GEM_NAME> [-v <VERSION>] --target vendor/gems
gem specification <GEM_NAME> [-v <VERSION>] --ruby > vendor/gems/<GEM_NAME>[-<VERSION>].gemspec

Na przykład:

gem unpack sidekiq-pro -v 2.1.4 --target vendor/gems
gem specification sidekiq-pro -v 2.1.4 --ruby > vendor/gems/sidekiq-pro-2.1.4.gemspec

Pierwsze polecenie rozpakowuje gem do katalogu vendor / gems. Jednak to nie zawiera gemspec. Drugie polecenie tworzy skojarzony gemspec. Warto zauważyć, że inny plakat wspominał o czymś podobnym. To rozwiązanie poprawnie zapisuje gemspec w formacie ruby zamiast w yaml.

Następnie możesz zaktualizować swój plik Gemfile, aby wskazać na sprzedawany klejnot:
gem '<GEM_NAME>', '<VERSION>', :path => "vendor/gems/<GEM_NAME>-<VERSION>"

Dla przykład:

gem 'sidekiq-pro', '2.1.4', :path => "vendor/gems/sidekiq-pro-2.1.4"
 5
Author: jsears,
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
2016-02-11 21:27:41

Można łatwo skończyć z czymś takim;

gem list | awk '{print $1}' | xargs gem unpack --target vendor/gems
 2
Author: Fernando Meyer,
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-11-09 04:09:23

Rozważ użycie "hostowanej" infrastruktury programistycznej dostarczonej przez gem hosted_gem_development .

Tworzenie klejnotów jest często trudne, ponieważ działają one jak oddzielne projekty w odniesieniu do aplikacji, w których ich używasz.

"hostowana" Infrastruktura programistyczna ułatwia rozwój gem, włączając je do aplikacji na żywo (czyniąc je "hostowanymi przez"). Następnie aktualizujesz kod gem, tak jak aktualizujesz zwykłą aplikację kod.

Przejdź do strony projektu

 0
Author: Alex Fortuna,
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
2012-03-08 21:25:06