Rails 5 Требовать зависимый драгоценный камень условно в драгоценном камне

Мы пишем драгоценный камень, который включает в себя несколько общих драгоценных камней, используемых в паре наших приложений. Мы хотим иметь какую-то конфигурацию, требующую или не требующую определенных драгоценных камней. Но application.rb или enviroment.rb/*rb загружаются после загрузки драгоценных камней. Так что мы не можем установить там конфиг. Следующий способ работает, но это не очень хорошая идея, и мне было интересно, есть ли более чистый способ сделать это.

ящик/рельсы. (В потребляющем приложении)

#!/usr/bin/env ruby

DISABLE_TRANSPORT = true

APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot'
require 'rails/commands'

Gemfile (в потребляющем приложении)

gem 'fruit_chain'

fruit_chain/lib/fruit_chain.rb (наша жемчужина)

require analytic 
require transport unless defined?(DISABLE_TRANSPORT) && DISABLE_TRANSPORT
require marketing
...

module FruitChain
end

person AirWick219    schedule 17.10.2018    source источник


Ответы (2)


Я не уверен, что понимаю, чего именно вы хотите... однако использование require: false в Gemfile может вам помочь?

# Gemfile

gem 'my_super_gem', require: false

И в инициализаторе вы require их:

# config/initializer/fruit_chain.rb

require 'my_super_gem'
person JoJoS    schedule 17.10.2018
comment
require: false будет работать, если я добавлю зависимости непосредственно в основное приложение. Но мы хотим сделать это в драгоценном камне, который включает в себя несколько драгоценных камней. В драгоценном камне мы добавляем все зависимые драгоценные камни в gemspec как spec.add_dependency, затем нам требуется зависимый драгоценный камень из lib/<gemname>.rb для приложения-потребителя. Мой вопрос: есть ли лучший способ opt-out/opt-in зависимых драгоценных камней из драгоценного камня - person AirWick219; 17.10.2018

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

person Phong Pham    schedule 25.11.2020
comment
Привет и добро пожаловать в Stack Overflow! Пройдите тур. Вы задаете вопрос или даете ответ? Описанная вами попытка решила проблему? - person Jeanne Dark; 26.11.2020