Gaz*_*zza 6 ruby-on-rails asset-pipeline
关于资产管道的主题,Rails指南建议Rails可以通过调用以下方式链接到控制器特定的CSS文件:
stylesheet_link_tag params[:controller]
Run Code Online (Sandbox Code Playgroud)
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 [ :controller]%>. http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline
这在我们允许Rails回归资产管道的开发中运行得很好.但是,在生产中,我收到一个错误,说样式表没有预编译.
根据我的阅读,您必须将要显示为独立文件的任何资产添加到预编译数组中,如下所示:
config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']
Run Code Online (Sandbox Code Playgroud)
如果我想要按照上面的Rails指南示例链接的控制器特定样式表,我是否必须枚举预编译数组中的每一个?
简短的回答是......是的.
但是,请记住,资产管道也可用于匹配选择器.我为一个简单的cms实现了类似的设置,我知道我希望每个控制器都有自己的.css和.js.配置看起来像......
config.assets.precompile += ["*.css", "*.js")
Run Code Online (Sandbox Code Playgroud)
如果您有许多与控制器没有直接关系的样式表或脚本,那么这不是最佳解决方案.在我的情况下,每个控制器需要非常不同的.js文件.
此外,如果您的不同资产可以分组为两个或三个相互关联的组,您可以考虑创建多个清单,然后明确列出它们.
编辑 我想为那些试图决定如何设置资产预编译的人提供这个答案.
除了显式预编译每个资产或清单之外,您还可以将要预先发布的所有文件放入资源文件夹中的文件夹中,并使用相同的通配符匹配来仅编译这些资产.
例如
config.assets.precompile += ['*.css', 'manifests/*.js']
Run Code Online (Sandbox Code Playgroud)
将编译清单文件夹中的所有CSS表和仅.js文件.
同样,您可以传递assets.precomile正则表达式.因此,如果您想将"pre_"附加到您想要预先发布的任何文件,您可以使用匹配...
config.assets.precompile += [/^pre_\w*.(css|js)/i]
Run Code Online (Sandbox Code Playgroud)
可能性是无穷无尽的,只是不要觉得你必须满足于预编译所有资产,这可能是无用的吞噬,因为大多数脚本和css应该编写为在多个实例中使用并与其他脚本一起使用,或者抛出所有内容,甚至高度专业化的脚本到应用程序.*.
| 归档时间: |
|
| 查看次数: |
2083 次 |
| 最近记录: |