如何基于rails 3.1中的通配符子域向Sprockets添加资产搜索路径?

Sea*_*ber 13 assets ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline

滑轨资产管道指南将指导您使用config.assets.pathsconfig/application.rb,但我没有在这一点上访问请求的子域.

我希望能够根据请求的子域前置一个额外的路径(仅针对当前请求).

我的申请具体细节

这是一个基本的CMS应用程序.根domain.com主机使用标准控制器/视图呈现和默认资产路径处理管理部分.

请求以此subdomain.domain.com为基础呈现网站subdomain.它只调用prepend_view_patha before_filterRails.root.join('vendor/sites/[subdomain]/templates')为当前请求添加 .

我希望能够Rails.root.join('vendor/sites/[subdomain]/assets')在请求主机时添加到Sprockets搜索路径[subdomain].domain.com.

编辑

我最后只是在mixin中删除了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)
Run Code Online (Sandbox Code Playgroud)

ped*_*edz 1

正如您对视图路径所做的那样,添加一个 before 过滤器并将新路径附加到 Rails.application.config.assets.paths

我在观看Railscasts #279 了解资产管道时得到了这个想法

  • 嗯,非常确定更改 Rails.application.config.assets.paths 将为整个应用程序永久添加路径,而不仅仅是当前请求。它就在您对 Rails.application 进行的调用中。AS 与 prepend_view_paths 相反,它被记录为仅影响当前请求。所以OP问题是你是否可以为asset_paths做类似的事情......但Rails.application不是。查看 prepend_view_paths 的代码可能会让您了解如何自行破解它。 (2认同)