Итак, я нахожусь в процессе создания приложения 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 и так далее для каждого бренда.Это возможно?