首页 > 解决方案 > Rails 5在gem中有条件地需要依赖gem

问题描述

我们正在编写一个 gem,其中包含在我们的几个应用程序中使用的多个常见 gem。我们希望能够有某种配置来要求或不需要某些宝石。但是application.rborenviroment.rb/*rb是在加载 gems 之后加载的。所以我们不能在那里设置配置。以下方法有效,但不是一个好主意,我想知道是否有更清洁的方法来做到这一点

垃圾箱/导轨。(在消费应用中)

#!/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

标签: ruby-on-railsrubygemsruby-on-rails-5.2

解决方案


我遇到了同样的问题,只想将 gem 明确地包含为应用程序的责任,然后通过配置将该 gem 注入到父 gem 中,并确保它们符合相同的接口。


推荐阅读