Распределители Rails требуют разработки различных драгоценных камней

Я пытаюсь создать среду разработки для разработки 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?

Ответ 1

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

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

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

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

Ответ 2

У меня была такая же проблема и решалась вот так:

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

Ответ 3

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