6

关于资产管道的主题,Rails Guides 建议 Rails 可以通过调用简单地链接到特定于控制器的 CSS 文件:

stylesheet_link_tag params[:controller] 

Rails 指南的摘录:

例如,如果您生成一个 ProjectsController,Rails 还将在 app/assets/javascripts/projects.js.coffee 和 app/assets/stylesheets/projects.css.scss 添加一个新文件。您应该将控制器特有的任何 JavaScript 或 CSS 放入它们各自的资产文件中,因为这些文件可以仅针对这些控制器加载,例如 <%= javascript_include_tag params[:controller] %> 或 <%= stylesheet_link_tag params[ :控制器] %>。 http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline

这在我们允许 Rails 依赖资产管道的开发中工作得很好。但是,在生产中,我收到一条错误消息,指出样式表未预编译。

根据我的阅读,您必须将要显示为独立文件的任何资产添加到预编译数组中,如下所示:

config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']

如果我想要按照上面的 Rails 指南示例链接的特定于控制器的样式表,我是否必须枚举预编译数组中的每个样式表?

4

1 回答 1

6

简短的回答是……是的。

但是,请记住资产管道也可用于匹配选择器。我为一个简单的 cms 实现了类似的设置,我知道我希望每个控制器都有自己的 .css 和 .js。配置看起来像...

config.assets.precompile += ["*.css", "*.js")

如果您分配了与控制器不直接相关的样式表或脚本,则不是最佳解决方案。就我而言,每个控制器都需要非常不同的 .js 文件。

此外,如果您的不同资产可以分为两个或三个相互关联的组,您可以考虑创建多个清单,然后明确列出它们。

编辑 我想为任何试图决定如何设置资产预编译的人完善这个答案。

除了显式预编译每个资产或清单之外,您还可以将要预编译的所有文件放入资产文件夹中的文件夹中,并使用相同的通配符匹配来仅编译这些资产。

例如

config.assets.precompile += ['*.css', 'manifests/*.js']

将编译所有 css 工作表,并且只编译 manifests 文件夹中的 .js 文件。

同样,您可以通过 assets.precomile 一个正则表达式。因此,如果您想将“pre_”附加到您想要预编译的任何文件中,您可以使用类似...

config.assets.precompile += [/^pre_\w*.(css|js)/i]

可能性是无穷无尽的,只是不要觉得你必须满足于预编译所有资产,这可能是无用的吞食,因为大多数脚本和 css 应该被编写为在多个实例中使用并与其他脚本一起使用,或者抛出所有东西,甚至应用程序中高度专业化的脚本。*。

于 2012-07-18T14:53:56.653 回答