Напишите немного промежуточного программного обеспечения, если вы хотите, чтобы знание конфигурации для каждой страны не попало в основное приложение.
Промежуточное программное обеспечение чрезвычайно просто.Промежуточное программное обеспечение бездействия выглядит следующим образом:
class DoesNothing
def initialize(app, *args)
@app = app
end
def call(env)
@app.call(env)
end
end
Rack приводит в действие приложения посредством объединения нескольких промежуточных программ вместе ... каждому дается ссылка на @app, который является следующим звеном в цепочке,и он должен вызвать #call
в этом приложении.Приложение в конце цепочки запускает приложение.
Итак, в вашем случае вы можете выполнить некоторые дополнительные настройки здесь.
class PerCountryConfiguration
def initialize(app)
@app = app
end
def call(env)
case env["COUNTRY"]
when "AU"
Rails.application.config.s3_buckets = { ... }
when "US"
Rails.application.config.s3_buckets = { ... }
... etc
end
@app.call(env)
end
end
Существует несколько способов использования промежуточного программного обеспечения,но поскольку это зависит от доступа к среде Rails, вы захотите сделать это изнутри Rails.Поместите его в ваш application.rb:
config.middleware.use PerCountryConfiguration
Если вы хотите передать дополнительные аргументы конструктору вашего промежуточного программного обеспечения, просто перечислите их после имени класса:
config.middleware.use PerCountryConfiguration, :some_argument
Вы можететакже смонтируйте промежуточное программное обеспечение изнутри ApplicationController, что означает, что все инициализаторы и все уже будут выполнены, так что это может быть слишком далеко по цепочке.