Пользовательский метод получения драгоценного камня внутри Gemfile

Когда мы создаем наши приложения с использованием пользовательского 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

нельзя просто использовать группы сборщиков?

Sergio Tulentsev 01.05.2018 16:46

@SergioTulentsev Если бы мы использовали группы, нам нужно было бы убедиться, что установка пакета была настроена так, чтобы исключить другие. Было бы больше кода и не очень чисто. Методика комментирования подойдет лучше. Мы ищем способ чисто использовать среду, чтобы диктовать установку гема.

Cameron 01.05.2018 16:53

@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 01.05.2018 17:19

@engineersmnky: да, но мы хотим установить на основе среды, а не не устанавливать на основе среды. Если бы мы использовали группы, нам бы пришлось сделать bundle install --without production qa bamboo для нашей разработки. Просто подумал, сможем ли мы построить что-то, что было бы проще, если бы мы могли адаптировать это наоборот. Мы используем эту команду на нашем сервере CI для исключения гемов разработки и тестирования, но это автоматизировано, поскольку наша команда использует терминал и т. д. Для создания пакета, поэтому им нужно будет не забыть исключить или настроить псевдоним, поэтому они Я предпочел подход с комментариями.

Cameron 01.05.2018 17:26

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

Cameron 01.05.2018 17:29

@Cameron, но у bundler нет среды, в которой есть rails. То, что вы объединяете, не означает, что вы используете rails, так что в этом случае будет означать среда?

engineersmnky 01.05.2018 17:40

Вы можете обернуть свой метод custom_gem командами из этот Gist. Попробуйте.

arjun 01.05.2018 18:08

@engineersmnky Итак, в нашем случае наш собственный метод был бы лучшим способом продвижения вперед ... но можем ли мы использовать собственные методы внутри Gemfiles?

Cameron 01.05.2018 18:28
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
8
88
0

Другие вопросы по теме