Как я могу продавать драгоценные камни для Rails3/Bundler - программирование
Подтвердить что ты не робот

Как я могу продавать драгоценные камни для 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? Является ли мой рабочий процесс каким-то образом нарушенным?

4b9b3361

Ответ 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.

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

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

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