Как добавить пути поиска активов в Sprockets на основе поддомена с подстановочными знаками в rails 3.1? - PullRequest
13 голосов
/ 21 сентября 2011

Руководство Rails Asset Pipeline указывает вам использовать config.assets.paths в config/application.rb, но у меня нет доступа к поддомену запроса на этом этапе.

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

Детали моего приложения

Это базовое приложение CMS.Корневой domain.com хост обрабатывает административную часть со стандартным рендерингом контроллера / представления и путями ресурсов по умолчанию.

Запросы к subdomain.domain.com отображают сайт на основе subdomain.Он вызывает prepend_view_path в before_filter и добавляет Rails.root.join('vendor/sites/[subdomain]/templates') только для текущего запроса.

Я хотел бы иметь возможность добавить Rails.root.join('vendor/sites/[subdomain]/assets') к путям поиска Sprockets, когда хост запроса [subdomain].domain.com.

РЕДАКТИРОВАТЬ

В результате я просто добавил миксин для Sprockets::Environment, который переписывает вызов метод:

module SiteAssetsResolver
  def call(env)
    begin
      # prepend path based on subdomain (from env)
      super # Sprockets::Server#call
    ensure
      # remove path based on subdomain
    end
  end
end

MyApp::Application.assets.extend(SiteAssetsResolver)

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Я согласен с комментатором по вашему вопросу, который сказал: «На самом деле конвейер ресурсов не предназначен для компиляции ваших активов при каждом запросе в процессе производства».- сделать невозможным выполнение точно того, что вы просите.

Итак, как насчет альтернативы для достижения того, чего вы на самом деле пытаетесь достичь, - это разное разрешение активов для разных поддоменов.Поместите ваши специфичные для субдомена активы в подкаталоги ваших папок активов.

Теперь в представлении / помощниках, когда вы вызываете asset_path или любых других помощников, которые выбирают относительный путь к активу, задайте для него «# {subdomain} / name_of_asset» вместо просто «name_of_asset».

Теперь, из-за того, как работает компилятор ресурсов, возможно этот метод подкаталога не будет работать, вам, возможно, придется вместо этого поместить поддомен в начало фактического имени файла."# {} Подобласть _name_of_asset".Точно сказать не могу.

И это все равно не даст вам своего рода «провал по умолчанию», когда некоторые активы в некоторых поддоменах не имеют активов, специфичных для поддоменов, они просто «проваливаются» до дефолта.Что было бы хорошо.Возможно, можно найти способ сделать это тоже, не уверен.

Но, во всяком случае, следуя этому подходу, запрашивая другой актив во время отображения с использованием логики в view / helper ...., вы добьетесь большего, чем предполагалось изначальноподход, который, вероятно, не представляется возможным.

1 голос
/ 28 сентября 2011

Так же, как вы сделали для своего пути просмотра, добавьте фильтр before и добавьте новый путь к Rails.application.config.assets.paths

Я получил эту идею во время просмотра Railscasts # 279 ПониманиеАктив Трубопровод

...