如何将markdown添加为资产管道的预处理器?

时间:2015-03-24 01:11:54

标签: ruby-on-rails markdown sprockets

我在app/assets/md/*.html.md中有markdown文件,我想用rake assets:precompile预编译。

如何设置资产管道以便它使用降价解析器生成预期的HTML文件?

此外,如何在视图中直接包含这些预编译资产,例如:

<div>
  <%= yield asset("my_markdown_fragment.html") %>
</div>

1 个答案:

答案 0 :(得分:2)

我已经找到了解决方案。这是我做的:

  1. rdiscount添加到Gemfilerdiscount是Ruby的Markdown处理器):

    gem 'rdiscount'
    
  2. 使用以下内容创建文件lib/markdown_preprocessor.rb

    require 'rdiscount'
    
    class MarkdownPreprocessor < Sprockets::Processor
      def evaluate(context, locals)
        RDiscount.new(begin;data;end).to_html
      end
    end
    
  3. MarkdownPreprocessor添加到config/initializers/sprockets.rb文件中的资产管道(如果该文件不存在,则创建此文件),如下所示:

    require 'markdown_preprocessor'
    
    Rails.application.assets.register_engine('.md', MarkdownPreprocessor)
    
  4. 将以下行添加到config/initializers/assets.rb文件中:

    Rails.application.config.assets.paths << Rails.root.join('app', 'assets', 'md')
    
  5. 现在完成配置。以下是一些其他指南和提示:

    • 将您的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