Как мне продать гем для Rails3 / Bundler - PullRequest
47 голосов
/ 05 сентября 2010

В Rails 2.X я мог просто скопировать гемы в vendor/gems/gem_name или использовать команду rake rake gems:unpack.Так как Rails3 использует упаковщик, он больше не работает.Я нашел команду bundle package, но она не работает так же.

Редактировать:

Итак, просто уточнить это:Как работали рельсы 2, я легко мог grep найти вещи в vendor/gems.Если они упакованы в .gem файлы, это невозможно.Кроме того, при разработке гема / плагина очень полезно поместить его в приложение rails, чтобы протестировать его в контексте.Как бы я делал такие вещи с bundler / rails3?Мой рабочий процесс как-то нарушен?

Ответы [ 5 ]

107 голосов
/ 13 сентября 2010

Отвечая на вторую часть вашего вопроса, разрабатывая плагин / гем и отправляя его вместе с приложением rails, не делая гем публично доступным, вы можете сделать это

Gemfile

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

при условии, что вы выполнили gem unpack my_private_gem --target vendor/gems

note: bundle package распаковывает все драгоценные камни (столько же, сколько в Gemfile.lock). Я не хотел бы, чтобы те в мерзавце.

27 голосов
/ 05 сентября 2010

Эквивалент Bundler равен bundle package.Он упаковывает все файлы .gem, указанные в Gemfile, в vendor/cache, чтобы при последующих установках гемы получали из этого кэша, а не из http://rubygems.org/

22 голосов
/ 11 февраля 2011

Правильный эквивалент Bundler bundle install --deployment.Это установит драгоценные камни в их распакованном состоянии в vendor/bundle.

5 голосов
/ 11 февраля 2016

Вот что у меня сработало:

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

Например:

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

Первая команда распаковывает гем в каталог vendor / gems.Однако, это не содержит gemspec.Вторая команда создает связанный gemspec.Примечательно, что в другом плакате упоминалось нечто подобное.Это решение правильно записывает gemspec в формате ruby, а не в yaml.

Затем вы можете обновить свой Gemfile, указав на продаваемый гем:

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

Например:

gem 'sidekiq-pro', '2.1.4', :path => "vendor/gems/sidekiq-pro-2.1.4"
0 голосов
/ 09 марта 2012

Рассмотрите возможность использования "размещенной" инфраструктуры разработки, предоставляемой hosted_gem_development gem.

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

«Размещенная» инфраструктура разработки упрощает разработку гемов, включая их (делая их «размещенными») в ваше живое приложение. Затем вы обновляете код своего драгоценного камня так же, как обновляете обычный код приложения.

Перейти на страницу проекта

...