Когда мы создаем наши приложения с использованием пользовательского Gem, мы должны постоянно вносить поправки в наш Gemfile, чтобы указывать либо на наш локальный код, наш общий сервер (с использованием geminabox), либо в процессе производства мы используем распакованную версию драгоценного камня (как нашу gem-сервер защищен vpn).
Это означает, что в нашем гем-файле есть такой код:
# QA and Bamboo
gem 'our_gem', '0.0.1', source: 'https://gems.website.com'
# Development, Test
#gem 'our_gem', path: "../our_gem"
# Production
#gem 'our_gem', path: "../vendor/gems/our_gem-0.1.1"
И наши разработчики должны продолжать комментировать и раскомментировать каждую строку, прежде чем они отправятся в ветку для создания на Bamboo и т. д.
Одно из предложений состояло в том, чтобы заменить его специальным методом, например:
custom_gem 'our_gem', '0.1.1'
вместо объявления gem
в Gemfile.
Что было бы:
def custom_gem(name, version = '0.0.1')
case Rails.env
when qa?, :bamboo?
gem name, version, source: 'https://gems.website.com'
when development?, test?
gem name, path: "../#{name}"
when production?
gem name, path: "../vendor/gems/#{name}-#{version}"
else
fail "Unknown environment for gem: #{name}"
end
end
Вопрос в том ... можете ли вы использовать такие собственные методы внутри Gemfile? и если да, то где этот код будет жить в приложении. Или нам придется прибегнуть к использованию чего-то вроде: http://bundler.io/man/gemfile.5.html#INSTALL_IF
@SergioTulentsev Если бы мы использовали группы, нам нужно было бы убедиться, что установка пакета была настроена так, чтобы исключить другие. Было бы больше кода и не очень чисто. Методика комментирования подойдет лучше. Мы ищем способ чисто использовать среду, чтобы диктовать установку гема.
@Cameron, но это то, для чего нужны группы, например. gem our_gem, "0.0.1", source: 'https://gems.website.com', group: [:qa,:bamboo]
и gem our_gem, path: "../our_gem", group: [:development,:test]
@engineersmnky: да, но мы хотим установить на основе среды, а не не устанавливать на основе среды. Если бы мы использовали группы, нам бы пришлось сделать bundle install --without production qa bamboo
для нашей разработки. Просто подумал, сможем ли мы построить что-то, что было бы проще, если бы мы могли адаптировать это наоборот. Мы используем эту команду на нашем сервере CI для исключения гемов разработки и тестирования, но это автоматизировано, поскольку наша команда использует терминал и т. д. Для создания пакета, поэтому им нужно будет не забыть исключить или настроить псевдоним, поэтому они Я предпочел подход с комментариями.
Было бы лучше, если бы Bundler поддерживал что-то вроде групп, в которых драгоценные камни устанавливались в зависимости от их среды, вместо того, чтобы вручную исключать их из других групп. По сути, это то, что мы пытаемся понять, сможем ли мы этого достичь.
@Cameron, но у bundler
нет среды, в которой есть rails
. То, что вы объединяете, не означает, что вы используете rails
, так что в этом случае будет означать среда?
Вы можете обернуть свой метод custom_gem командами из этот Gist. Попробуйте.
@engineersmnky Итак, в нашем случае наш собственный метод был бы лучшим способом продвижения вперед ... но можем ли мы использовать собственные методы внутри Gemfiles?
нельзя просто использовать группы сборщиков?