Bundler Rails требует другого драгоценного камня в разработке - PullRequest
10 голосов
/ 28 февраля 2012

Я пытаюсь создать среду разработки для разработки гема Rails. Я хотел бы загрузить драгоценный камень из локального источника в режиме разработки и через rubygems в производстве. Я хотел бы сделать что-то вроде следующего:

Gemfile

group :production do
  gem 'my_gem', '1.0.0'
end

group :development do
  gem 'my_gem', :path => '~/apps/my_gem'
end

Когда я запускаю команду bundle, упаковщик жалуется, что вы не можете загрузить один и тот же самоцвет дважды. Есть ли способ требовать разные версии гема в зависимости от среды Rails?

Ответы [ 3 ]

22 голосов
/ 21 августа 2012

У меня была такая же проблема, и я решил ее следующим образом:

if ENV["RAILS_ENV"] == "development"
  gem 'my_gem', :path => '~/apps/my_gem'
else
  gem 'my_gem', '1.0.0'
end

, затем вы можете запустить RAILS_ENV=development bundle на своем локальном компьютере и выполнить любую команду, относящуюся к среде, через RAILS_ENV=development bundle exec

9 голосов
/ 28 февраля 2012

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

Что происходит, когда ваша локальная версия этого драгоценного камняотличается от выпущенного в Rubygems (возможно, потому что вы забыли выпустить новую версию?)?Ваше приложение может взорваться, и вы не сможете воспроизвести его в процессе разработки, что является ужасным .

Что касается того, почему это невозможно даже достичь с помощью Bundler (по крайней мере,сейчас): что произойдет, если версии зависимостей для Gem отличаются в версии Rubygems по сравнению с локальной версией?Теперь весь ваш Gemfile.lock должен иметь два совершенно разных графа зависимостей, и вы потенциально можете представить несметное количество дополнительных точек сбоя в производстве, которых не было бы в разработке.

Тем не менее, все в порядке, временно измените свой Gemfile на локальную версию при внесении изменений в самоцвет, но вы должны изменить его обратно и выпустить новую версию самоцвета, затем bundle update my_gem, чтобы соответствующим образом обновить Gemfile.lock.

0 голосов
/ 28 февраля 2012

возможно, вы поместили гем 'my_gem' куда-то еще, дважды проверьте его

...