Разные активы на поддомен в Rails - PullRequest
0 голосов
/ 24 мая 2018

Итак, я нахожусь в процессе создания приложения Rails, которое будет обслуживать различный контент в зависимости от субдомена.

Приложение всегда будет работать, и когда мы захотим выпустить новый бренд (субдомен)скажем, newbrand.example.com, мы будем упаковывать активы для этого бренда с помощью Sprockets, а затем выгружать их на S3 (поддомен - это имя подпапки, например, /brand/assets/... и /newbrand/assets/...).

Активы и локали будутединственное, что меняется для каждого субдомена, у меня уже есть чистое решение для локалей (с использованием гема i18n-active_record), но я поставлен в тупик с различными активами для субдомена.

У меня есть некоторый пользовательский код, который подключается кРаздвигает и упаковывает каталог ресурсов и создает необходимый файл манифеста и т. Д .:

env = Sprockets::Environment.new

# manifest.compile fails when the below method isn't present
env.context_class.class_eval do
    def asset_path(path, options = {})
    end
end

%w[config fonts images javascripts stylesheets].each do |folder|
  Sprockets.append_path(File.join(Dir.pwd, 'assets', folder))
end

manifest = Sprockets::Manifest.new(env, File.join(Dir.pwd, 'compiled'))
assets = [%w[**/*.jpeg **/*.jpg **/*.svg **/*.png **/*.gif], ['**/*.js'], /(?:\/|\\|\A)application\.(css|js)$/]

manifest.compile(assets)

Идея состоит в том, что в фоновом режиме эта предварительно скомпилированная папка активов будет отправлена ​​на S3 с помощью отдельной задачи.

Моя проблема в том, что я не могу заставить Rails искать новые ресурсы при посещении разных поддоменов.

Способ переключения asset_host через поддоменвыполняется следующим образом:

config.action_controller.asset_host = Proc.new { |source, request|
    "http://example.s3.amazonaws.com/#{request.subdomain}/"
}

Поэтому, когда я получаю доступ к newbrand.example.com, я хочу, чтобы он загружал активы из этой подпапки на S3 и так далее для каждого бренда.Это возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...