使用 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 资产管道 - 为啥我的图像没有为生产进行预编译?
Angular + .nghaml 模板:引用预编译的图像资产