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?
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.
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/
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
.
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"
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
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.
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