使用 rails 资产管道预编译超薄模板

Posted

技术标签:

【中文标题】使用 rails 资产管道预编译超薄模板【英文标题】:Precompile slim templates using the rails asset pipeline 【发布时间】:2013-02-03 11:50:41 【问题描述】:

如果我可以,那将非常方便。我希望将我的模板粘贴在 app/assets/html 中并以这种方式提供它们。

这是我目前所得到的:

# config/initializers/slim.rb
Rails.application.assets.register_engine('.slim', Slim::Template)

# config/application.rb
config.assets.paths << "#Rails.root/app/assets/html"
config.assets.register_mime_type('text/html', '.html')

运行 rake assets:precompile 会读取 app/assets/html 中的 .html.slim 文件,但不会编译它们,并且输出文件仍具有 .slim 扩展名。

有没有办法让它工作?

【问题讨论】:

【参考方案1】:

@kurt-mueller 的回答是正确的,但需要针对带有 Sprockets 3+ 的 Rails 4 进行更新。 Sprockets 发生了变化,这意味着 assets 属性在初始化期间不存在。相反,您可以这样做:

# config/initializers/slim.rb

Rails.application.config.after_initialize do |app|
  app.config.assets.configure do |env|
    env.register_engine(".slim", Slim::Template)
  end
end

【讨论】:

更新了我的答案以使用recommended method。【参考方案2】:

抱歉,我迟到了,但 Dillon Buchanan 回答了这个问题here。

转到config/initializers 目录并创建一个类似slim_assets.rb 的文件(或类似的文件)并复制粘贴以下行:

Rails.application.assets.register_engine('.slim', Slim::Template)

我用 HAML(我用它为 Rails/AngJS 应用程序编写模板)做了类似的事情并取得了巨大的成功。

【讨论】:

【参考方案3】:

您可以尝试在production.rb 上添加这样的新路径:

config.assets.precompile += ["*.js", "*.css", "*.slim"]  #whatever you need

【讨论】:

【参考方案4】:

您需要将静态文件添加到预编译数组中:

config.assets.precompile += %w(vendor/modernizr 404.html)

【讨论】:

以上是关于使用 rails 资产管道预编译超薄模板的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3.1 资产管道 - 为啥我的图像没有为生产进行预编译?

Rails:预编译资产缺少节点模块

Angular + .nghaml 模板:引用预编译的图像资产

如何加快 Rails Asset Pipeline 预编译过程?

未使用 Rails 测试环境中的预编译资产

RAILS 轨道资产:预编译失败