【发布时间】:2011-11-22 04:51:46
【问题描述】:
Rails Asset Pipeline guide 指示您在config/application.rb 中使用config.assets.paths,但此时我无权访问请求的子域。
我希望能够根据请求的子域添加额外的路径(仅适用于当前请求)。
我的应用具体细节
这是一个基本的 CMS 应用。根domain.com 主机使用标准控制器/视图呈现和默认资产路径处理管理部分。
对subdomain.domain.com 的请求会根据subdomain 呈现站点。它在before_filter 中调用prepend_view_path,并仅为当前请求添加Rails.root.join('vendor/sites/[subdomain]/templates')。
当请求主机为 [subdomain].domain.com 时,我希望能够将 Rails.root.join('vendor/sites/[subdomain]/assets') 添加到 Sprockets 搜索路径。
编辑
我最终只是为 Sprockets::Environment 添加了一个 mixin,它覆盖了 call 方法:
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)
【问题讨论】:
-
资产管道并不是真的要编译生产中的每个请求的资产。它非常适合开发,但您应该将它们编译为静态文件以进行生产。因此,您需要为此开发自己的系统(也许是一个提供 CSS 文件的控制器?)或单独构建您的应用程序。
标签: ruby-on-rails ruby-on-rails-3.1 assets sprockets asset-pipeline