Как я могу указать местный драгоценный камень в моем Gemfile?

280

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

Теги:
rubygems
ruby-on-rails-3
bundler

5 ответов

435
Лучший ответ

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

gem "foo", :path => "/path/to/foo"
  • 9
    Жестко запрограммированный путь подходит для быстрого хакерского сеанса, но локальное решение gem от bloudermilk более эффективно для проектов под управлением версиями. Это позволяет вам проверять оба проекта - gem и project, используя gem - так что другим не придется проверять источник gem или использовать одни и те же пути.
  • 3
    Вы можете сделать это немного чище, используя символическую ссылку .gitignored на ваш локальный гем в каталоге вашего проекта - таким образом вы можете использовать управление исходным кодом для обоих проектов по отдельности, а другие могут делать то же самое, не имея идентичной структуры каталогов.
Показать ещё 5 комментариев
185

В дополнение к указанию пути (как упоминал Джимми) вы также можете заставить 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

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

  • 0
    У меня проблемы с этим, потому что я использую BUNDLE_PATH ( BUNDLE_PATH пакета для распространения). Делая то, что вы предложили, или ответ Джимми, он только using , а не фактически устанавливает в мою папку BUNDLE_PATH . Я не смог понять это, любая помощь?
  • 2
    Обратите внимание, что это не будет работать с gemspec , согласно обсуждению здесь .
Показать ещё 3 комментария
25

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

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

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

bundle exec gem uninstall foo
bundle update foo

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

  • 4
    это замечательно, но не так удобно, если вы активно разрабатываете гем ... потому что вам нужно будет зафиксировать каждое изменение и bundle uninstall <gem> && bundle install , для каждого изменения, которое вы хотите отразить в своем приложении
14

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

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

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

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

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

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

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

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
  • Запуск 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

  • Наконец, запустите 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 не показывает локальные драгоценные камни как внешнюю библиотеку. Более подробную информацию об ошибке можно найти здесь и здесь
  • Когда я что-то меняю в локальном gem, чтобы загружаться в приложение rails, я должен stop/start сервер rails
  • Если я изменяю version драгоценного камня, stopping/starting сервер Rails дает мне ошибку. Чтобы исправить это, я указываю версию gem в приложении rails Gemfile следующим образом:

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
-3

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

gem 'foo', path: "point/to/your/path", branch: "branch-name"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню