설치
vi Gemfile
gem 'redcarpet'
셋업
vi config/initializers/redcarpet.rb

require 'ostruct'

AppConfig = OpenStruct.new

renderer_options = {
  # no_links: true,
  hard_wrap: true
}
markdown_options = {
  autolink: true,
  space_after_headers: true,
  no_intra_emphasis: true,
  highlight: true, # ==word==
  quote: true, # "word"
  underline: true, # _word_
  strikethrough: true, # ~~word~~
  footnote: true, # [^1]
  superscript: true, # 2^(nd)
  lax_spacing: true,
  autolink: true,
  tables: true,
  fenced_code_blocks: true, # ```ruby
  disable_indented_code_blocks: true,
}

renderer = Redcarpet::Render::HTML.new(renderer_options)

AppConfig.markdown = Redcarpet::Markdown.new(renderer, markdown_options )
초기화 과정을 통해 어플리케이션에서 사용할 마크다운 인스턴스를 정의한다. 여기서는 OpenStruct를 사용해서 AppConfig.markdown을 레일즈 앱 어디서든 참조가 가능한 글로별 변수로 만드는 것을 보여준다. 마크다운 인스턴스를 만드는 과정에는 HTML을 출력하는데 사용할 렌더러(Renderer)를 정하고 마크다운 옵션을 커스터마이즈 하는 절차가 포함되는데 여기서는 Redcarpet에서 제공하는 기본 렌더러인 Redcaret::Render::HTML을 사용하고 있다.
사용하기
가령 Blog 모델에 summary라는 속성이 있다고 하고, summary에 마크다운을 적용하고 싶다면 아래와 같은 코드를 작성한다.
vi blog.rb

def mk_summary
  AppConfig.markdown.render(self.summary).html_safe
end
vi app/views/blogs/show.html.erb

<%= @blog.title %>
<%= @blog.mk_summary %>
렌더러(Renderer) 확장
Redcarpet은 사용자 지정 HTML 렌더러의 사용을 허용한다. 가장 쉬운 방법은 기본 렌더러인 Redcaret::Render::HTML을 상속한 후 renderer 콜백을 오버라이딩 하는 것이다.
vi config/initializers/redcarpet.rb

class MyHTML < Redcarpet::Render::HTML
  def header(text, level)
    level += 1
    "#{text}"
  end
end

renderer = MyHTML.new(renderer_options)
AppConfig.markdown = Redcarpet::Markdown.new(renderer, markdown_options )
이 예는 h1 헤딩 마크다운인 # 이 사용되었을 때 호출되는 header() 콜백을 수정하여 h2로 마크업을 생성하는 사례이다. 이와같은 방식으로 호출할 수 있는 콜백의 종류는 Redcarpet HTML 렌더러 콜백을 참고한다.
데모