Как я могу продавать драгоценные камни для Rails3/Bundler
В Rails 2.X я мог просто скопировать драгоценные камни в vendor/gems/gem_name
или использовать команду rake rake gems:unpack
. Поскольку Rails3 использует bundler, он больше не работает. Я нашел команду bundle package
, но она работает не так.
Изменить:
Итак, просто немного поразмышляем над этим:
Как работали рельсы 2, я мог легко grep найти материал в vendor/gems
. Если они собраны в файлы .gem
, это невозможно. Кроме того, при разработке gem/plugin очень полезно разместить его в приложении rails для проверки его в контексте. Как я буду делать такие вещи с bundler/rails3? Является ли мой рабочий процесс каким-то образом нарушенным?
Ответы
Ответ 1
Отвечая на вторую часть вашего вопроса, разрабатывая плагин/драгоценный камень и отправляя его с помощью приложения rails, не делая общедоступным gem, вы можете сделать это
Gemfile
gem 'my_private_gem', :path => "vendor/gems/my_private_gem-VERSION"
при условии, что вы выполнили gem unpack my_private_gem --target vendor/gems
note: пакет bundle распаковывает все драгоценные камни (как и в Gemfile.lock). Я бы не хотел, чтобы в git.
Ответ 2
эквивалент Бундлера bundle package
. Он упаковывает все файлы .gem, указанные в Gemfile, в vendor/cache
, поэтому будущие установки получат драгоценные камни из этого кеша, а не из http://rubygems.org/
Ответ 3
Правильный эквивалент Бундлера равен bundle install --deployment
. Это установит драгоценные камни в их распакованном состоянии в vendor/bundle
.
Ответ 4
Это то, что сработало для меня:
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 в рубиновый формат, а не в 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"
Ответ 5
Вы можете легко получить что-то вроде этого;
gem list | awk '{print $1}' | xargs gem unpack --target vendor/gems
Ответ 6
Рассмотрите возможность использования "размещенной" инфраструктуры развития, поставляемой hosted_gem_development gem.
Разработка драгоценных камней часто сложна, потому что они действуют как отдельные проекты в отношении приложений, в которых вы их используете.
"Хостинговая" инфраструктура разработки облегчает разработку драгоценных камней, вставляя их (делая их "размещенными" ) вашим живым приложением. Затем вы обновляете свой код драгоценного камня, как если бы вы обновляли обычный код приложения.
Перейти на страницу проекта