Как я могу указать локальный гем в моем Gemfile?

Я хочу, чтобы Bundler загрузил местный самоцвет. Есть ли для этого возможность? Или мне нужно переместить папку драгоценных камней в каталог .bundle?


person picardo    schedule 20.12.2010    source источник


Ответы (6)


Я считаю, что вы можете это сделать:

gem "foo", path: "/path/to/foo"
person Jimmy    schedule 20.12.2010
comment
Жестко запрограммированный путь подходит для быстрого сеанса взлома, но решение для локальных гемов от bloudermilk более эффективно для проектов с контролем версий. Это позволяет вам постоянно проверять оба проекта - драгоценный камень и проект, использующий драгоценный камень - таким образом, чтобы другим не приходилось проверять источник драгоценного камня или использовать одни и те же пути. - person mahemoff; 12.06.2014
comment
Вы можете сделать это немного чище, используя символическую ссылку .gitignored на ваш локальный гем в каталоге вашего проекта - таким образом вы можете использовать систему управления версиями для обоих проектов отдельно, а другие могут делать то же самое, не имея идентичной структуры каталогов. - person Dan; 27.05.2015
comment
Что-то, чего стоит остерегаться, может быть Весна. Если вы используете локальный путь для своего драгоценного камня, вы можете заметить кешированные версии вашего локального драгоценного камня, как это сделал я в консоли rails. Если похоже, что изменения в вашем локальном самоцвете не принимаются, попробуйте spring stop проверить, действительно ли это проблема. - person Jason R; 10.09.2016
comment
Добавление пути к локальному гему в config / spring.rb, похоже, помогает улавливать изменения локального драгоценного камня после перезапуска консоли / сервера rails. - person Jason R; 10.09.2016
comment
Лучше сделать это здесь: rossta.net/blog/ - person Cyzanfar; 24.10.2016
comment
Это отличный способ сделать это, если вы тестируете локальную разработку драгоценного камня на более крупном проекте. В этом случае это лучший способ сделать это, чем отправлять в репозиторий для проверки локальных изменений. - person Andy Baird; 20.11.2016
comment
ПРИМЕЧАНИЕ. Вы не можете указать branch для использования при использовании path, поэтому при этом убедитесь, что правильная ветка выбрана в локальной файловой системе. - person Joshua Pinter; 22.02.2019

Помимо указания пути (как упомянул Джимми), вы также можете заставить Bundler использовать локальный гем только для вашей среды, используя следующую опцию конфигурации:

$ bundle config local.GEM_NAME /path/to/local/git/repository

Это чрезвычайно полезно, если вы разрабатываете два гема или приложение для рельсов одновременно.

Обратите внимание, что это работает только тогда, когда вы уже используете git для своей зависимости, например:

# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'

# In your terminal
$ bundle config local.rack ~/Work/git/rack

Как видно из документации.

person bloudermilk    schedule 05.01.2013
comment
У меня проблемы с этим, потому что я использую BUNDLE_PATH (создание пакета для распространения). При выполнении того, что вы предложили, или ответа Джимми, он выполняет только using, а не фактически устанавливает в мою папку BUNDLE_PATH. Я не смог понять это, есть помощь? - person Automatico; 13.02.2014
comment
Обратите внимание, что это не будет работать с gemspec согласно обсуждению, здесь . - person davetapley; 10.07.2014
comment
Чтобы отключить локальное переопределение: bundle config --delete local.GEM_NAME - person alxndr; 30.11.2014
comment
Мне пришлось удалить директиву версии из строки драгоценного камня, чтобы это работало. - person Epigene; 27.01.2016
comment
Обратите внимание, что путь, указанный в команде bundle, должен быть корневым каталогом исходного кода другого драгоценного камня. - person Benjineer; 19.11.2019

Вы также можете ссылаться на локальный гем с помощью git, если вы над ним работаете.

gem 'foo',
  :git => '/Path/to/local/git/repo',
  :branch => 'my-feature-branch'

Затем, если он изменится, я бегу

bundle exec gem uninstall foo
bundle update foo

Но я не уверен, что всем нужно выполнять эти два шага.

person Rimian    schedule 25.04.2013
comment
это здорово, но не так удобно, если вы активно разрабатываете гем ... потому что вам нужно фиксировать каждое изменение & bundle uninstall <gem> && bundle install для каждого изменения, которое вы хотите отразить в своем приложении. - person Ramses; 03.11.2017

Чтобы использовать локальный репозиторий гемов в проекте Rails, выполните следующие действия:

  1. Проверьте, является ли ваша папка gem репозиторием git (команда выполняется в папке gem)

    git rev-parse --is-inside-work-tree
    
  2. Получение пути к репозиторию (команда выполняется в папке gem)

    git rev-parse --show-toplevel
    
  3. Настройка локального переопределения для приложения rails

    bundle config local.GEM_NAME /path/to/local/git/repository
    

    где GEM_NAME - имя вашего драгоценного камня, а /path/to/local/git/repository - результат выполнения команды в пункте 2

  4. В своем приложении Gemfile добавьте следующую строку:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
  5. Запуск bundle install должен дать что-то вроде этого:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
    

    где GEM_NAME - название вашего драгоценного камня, а /path/to/local/git/repository - от точки 2

  6. Наконец, запустите bundle list, а не gem list, и вы должны увидеть что-то вроде этого:

    GEM_NAME (0.0.1 5a68b88)
    

    где GEM_NAME - название вашего драгоценного камня


Несколько важных случаев, которые я наблюдаю, используя:

Rails 4.0.2  
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10  
RubyMine 6.0.3
  • Кажется, RubyMine не показывает локальные драгоценные камни как внешнюю библиотеку. Дополнительную информацию об ошибке можно найти здесь и здесь
  • Когда я что-то меняю в локальном геме, для загрузки в приложение rails я должен stop/start сервер rails
  • Если я меняю version гема, stopping/starting сервер Rails выдает мне ошибку. Чтобы исправить это, я указываю версию гема в приложении rails Gemfile следующим образом:

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
person gotqn    schedule 11.05.2014

Вы можете ссылаться на драгоценные камни с источником:

source: 'https://source.com', git repository (:github => 'git/url') и с локальным путем

:path => '.../path/gem_name'.

Вы можете узнать больше о [Gemfiles и их использовании] (https://kolosek.com/rails-bundle-install-and-gemfile) в этой статье.

person Nesha Zoric    schedule 09.03.2018

Если вам тоже нужна ветка:

gem 'foo', path: "point/to/your/path", branch: "branch-name"
person C Johnson    schedule 18.06.2015
comment
Не работает, выдает ошибку: Only gems with a git source can specify a branch. - person KenB; 07.06.2019