Ruby gem эквивалент "pip install -e"?
В Python я могу установить пакет из источника в "редактируемый" режим, используя pip install -e
. Затем я могу продолжить редактирование кода, и любые изменения будут автоматически выбраны другими скриптами Python, которые import library
Есть ли сопоставимый рабочий процесс для разработки драгоценных камней Ruby? Что такое "Ruby way" использования libs по мере их разработки, а не, например, для компиляции и установки драгоценного камня каждый раз, когда я вношу изменения в источник?
Ответы
Ответ 1
Есть два общих подхода, которые можно использовать с bundler
:
- выполняется
bundle install --path vendor/bundle
и не запускается bundle update
, если все не проверено.
- один говорит поставщику использовать локальную версию драгоценного камня:
- в
Gemfile
(это не поддерживается в mymaingem.gemspec
из-за проблем с поддержкой Rubygems): gem 'mycutegem', :git => 'git://github.com/myname/mycutegem', :branch => 'master'
;
- в командной строке:
bundle config local.mycutegem /path_to_local_git/mycutegem
.
Первый подход будет загружать все в подпапку вашего текущего проекта (здесь itd be vendor/bundle
.) Не стесняйтесь изменять все, что есть, оно будет отражено.
Второй подход, скорее всего, будет лучше. Вы должны клонировать драгоценный камень из github и инструктировать bundle
для использования вашего локального клона в соответствующем репозитории git. Этот подход дает вам возможность публиковать изменения в основной драгоценности в репозитории. Как только будет опубликовано зависимое репо, обновленная версия будет извлекаться вашими подписчиками на драгоценные камни, если они не указали своим bundler
на использование своих локальных жителей.
Надеюсь, что это поможет.
Ответ 2
Предположим, что у вас есть свой код драгоценного камня, находящийся в папке (скажем my_project/mygem/lib
). У вас есть код Ruby в my_project
, который вы хотите использовать с кодом mygem
.
Что бы я сделал, добавьте mygem/lib
в глобальную переменную $LOAD_PATH
в начале указанных файлов. Своего рода:
$LOAD_PATH << File.expand_path('lib', './mygem') # Resolve global paths
require 'a_file' # Would require "mygem/lib/a_file.rb"
Ответ 3
Я не уверен, что это именно то, чего вы хотите достичь, но из описания я делаю вывод, что вы хотите иметь локальную копию какого-либо драгоценного камня и ссылаться на этот камень в своем проекте.
Если это так, вы можете (обычно) достичь этого в два этапа:
- Клонировать драгоценный камень из VCS (в большинстве случаев: git), например.
git clone url-of-the-gem-repo
- Ссылка на локальную копию с использованием Bundler: путь, например.
gem "some-gem", :path => "/path/to/local/copy"
Если драгоценный камень хранится в github, еще лучший способ - сначала разветкить его в github и затем клонировать вашу собственную копию. Затем, если вы предоставите какие-либо улучшения кода в локальном репо, вы можете легко поделиться им с миром, используя запрос на перенос.