我在app/assets/md/*.html.md
中有markdown文件,我想用rake assets:precompile
预编译。
如何设置资产管道以便它使用降价解析器生成预期的HTML文件?
此外,如何在视图中直接包含这些预编译资产,例如:
<div>
<%= yield asset("my_markdown_fragment.html") %>
</div>
答案 0 :(得分:2)
我已经找到了解决方案。这是我做的:
将rdiscount
添加到Gemfile
(rdiscount
是Ruby的Markdown处理器):
gem 'rdiscount'
使用以下内容创建文件lib/markdown_preprocessor.rb
:
require 'rdiscount'
class MarkdownPreprocessor < Sprockets::Processor
def evaluate(context, locals)
RDiscount.new(begin;data;end).to_html
end
end
将MarkdownPreprocessor
添加到config/initializers/sprockets.rb
文件中的资产管道(如果该文件不存在,则创建此文件),如下所示:
require 'markdown_preprocessor'
Rails.application.assets.register_engine('.md', MarkdownPreprocessor)
将以下行添加到config/initializers/assets.rb
文件中:
Rails.application.config.assets.paths << Rails.root.join('app', 'assets', 'md')
现在完成配置。以下是一些其他指南和提示:
将您的Markdown文件放入app/assets/md/
文件夹。
您的文件扩展名以.md
结尾,但我建议.html.md
(因为结果是HTML文件)。
添加<%= ruby %>
扩展程序后,您可以将.erb
插入Markdown文件中。例如,尝试使用以下内容创建此文件app/assets/md/hello.html.md.erb
:
# Hello <%= "_World_ " * 42 %>
您可以使用以下命令访问视图和控制器中生成的HTML内容:
Rails.application.assets[asset_path].to_s.html_safe