Як я можу вказати локальний дорогоцінний камінь у своєму Gemfile?


359

Я хотів би, щоб Bundler завантажив місцевий дорогоцінний камінь. Чи є варіант для цього? Або мені потрібно перемістити папку gem у каталог .bundle?

Відповіді:


539

Я вірю, що ви можете це зробити:

gem "foo", path: "/path/to/foo"

10
Швидко кодований шлях чудово підходить для швидкого сеансу злому, але локальне рішення дорогоцінного каміння bloudermilk є більш ефективним для проектів під контролем версій. Це дозволяє вам постійно перевіряти обидва проекти - дорогоцінний камінь та проект, використовуючи дорогоцінний камінь - таким, що іншим не доведеться перевіряти джерело дорогоцінного каміння або ділитися однаковими шляхами.
mahemoff

4
Ви можете зробити це трохи чистіше, скориставшись .gitignored символьним посиланням на ваш локальний дорогоцінний камінь у вашому каталозі проектів - таким чином ви можете використовувати управління джерелами для обох проектів окремо, а інші можуть робити те ж саме, не маючи ідентичної структури каталогу.
Dan

6
Щось, на що слід пильнувати, може бути Весна. Якщо ви використовуєте локальний шлях для дорогоцінного каміння, ви можете помітити кешовані версії вашого місцевого дорогоцінного каміння, як я це робив у консолі рейки. Якщо вам не здається, що місцеві зміни дорогоцінного каміння збираються, спробуйте spring stopпереконатися, чи справді це проблема.
Джейсон Р

1
Додавання локального шляху дорогоцінного каміння до config / spring.rb, здається, допомагає підбирати зміни ваших локальних каменів після перезавантаження консолі / сервера рейки.
Джейсон Р

4
Шлях кращий спосіб зробити це тут: rossta.net/blog/…
Cyzanfar

229

На додаток до зазначення шляху (як згадував Джиммі), ви також можете змусити 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

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


У мене виникають проблеми з цим, оскільки я використовую BUNDLE_PATH(створення пакету для розповсюдження). Роблячи те, що ви запропонували, або у відповідь Джиммі, він виконує лише "a" using, а не фактично встановлюється в мою BUNDLE_PATHпапку. Я не зміг це зрозуміти, будь-яка допомога?
Automatico

2
Зверніть увагу, що це не буде працювати з gemspec , за обговорення тут .
davetapley

31
Щоб вимкнути локальне перевизначення:bundle config --delete local.GEM_NAME
alxndr

Мені довелося видалити директиву версії з лінії дорогоцінного каміння, щоб змусити це працювати.
Епіген

4
Якщо ви хочете використовувати іншу галузь у розробці від виробництва, вам також доведеться встановити bundle config disable_local_branch_check trueабо Bundler поскаржиться на галузь. Але будьте обережні з цим, оскільки чеки повинні зупинити неправильне введення комітетів Gemfile.lock. Документи тут: bundler.io/v1.12/git.html
Лев

33

Ви також можете посилатися на локальний камінь із git, якщо у вас трапляється працювати над ним.

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

Потім, якщо це зміниться, я біжу

bundle exec gem uninstall foo
bundle update foo

Але я не впевнений, що всім потрібно виконати ці два кроки.


5
це чудово, але це не так зручно, якщо ви активно розробляєте дорогоцінний камінь ... тому що вам потрібно буде здійснити кожну зміну & bundle uninstall <gem> && bundle install , для кожної зміни, яку ви хочете відобразити на вашому додатку
Рамзес

18

Для використання локального сховища дорогоцінних каменів у проекті Rails виконайте наступні кроки:

  1. Перевірте, чи ваша папка gem є сховищем git (команда виконується в папці gem)

    git rev-parse --is-inside-work-tree
  2. Отримання шляху до репозиторію (команда виконується в папці gem)

    git rev-parse --show-toplevel
  3. Налаштування локального переопрацювання для програми рейки

    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це не показ місцевих дорогоцінних каменів як зовнішньої бібліотеки. Більше інформації про помилку можна знайти тут і тут
  • Коли я щось міняю в локальному самоцвіті, щоб завантажити його в додаток рейлів, я повинен stop/startсервер рейки
  • Якщо я versionзмінюю дорогоцінний камінь, stopping/startingсервер Rails видає мені помилку. Щоб виправити це, я вказую версію дорогоцінного каміння в додатку рейки Gemfileтаким чином:

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


-4

Якщо ви теж хочете відділення:

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

Це не працює, створює помилку: Only gems with a git source can specify a branch.
КенБ,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.