How to render images from Markdown files with Rails 5.2?

Viewed 9

I based my applications inline help on Markdown files, implemented with Redcarpet gem. Contextual help is displayed as expected, but embedded images are not.

The help files structure in the project is:

public/help/administration/Connection
                          - Business_resources_hierarchy.png
                          - connections-fr.md

The connection-fr.md files contains:

# CONNECTIONS

Décrit la gestion des connexions aux ressources de l'infrastructure informatique.

## Principe de fonctionnement
La connaissance des ressources techniques comporte un certain niveau de complexité :
 * adresses IP et protocoles des services
 * login et mot de passe des utilisateurs techniques
 * droits d'utilisation de la ressource
 * multipliés par le nombre d'environnements déployés dans l'organisation (Dev, Test, Prod ...)

La gestion des connexions permet au métier de s'affranchir de cette complexité en offrant une vue métier des ressources nécessaires à la production statistique au travers d'une hiérarchie :

![Hiérarchie des resources métiers](Business_resources_hierarchy.png)

## Eléments d'infrastructure
 1. Les ressources métiers - offrent une vue fonctionnelle des

Markdown is supported by the application_helper.rb:

module ApplicationHelper

### Implementing Help files management with Markdown
  def markdown
      markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true, tables: true)
  end

  def displayHelp
    puts "Help requested for: #{params[:page_name]}.#{params[:format]}"
    # Parse the request from the page -> namespace/class/controller
    if params[:page_name].index('/')
      domain = params[:page_name].split('/')[0]
      page = params[:page_name].split('/')[1]
    else
      domain = ''
      page = params[:page_name]
    end
    method = params[:format] # The method from the controller is not used yet

    # Build the help file path and name using the current locale
    case page
    when 'Change_Log' # Does it still exist?
      filename = File.join(Rails.root, 'public', "CHANGELOG.md")
    when 'Release_notes' # Does it still exist?
      filename = File.join(Rails.root, 'public', "Release_notes.md")
    else
      filename = File.join(Rails.root,
                            'public',
                            'help',
                            domain,
                            page.classify,
                            "#{page}-#{I18n.locale.to_s[0,2]}.md"
                          )
    end
    puts "Requested help file: #{filename}"

    if not File.file?(filename)
      filename = File.join(Rails.root, 'public', 'help', "help-index-#{I18n.locale.to_s[0,2]}.md")
    end

    begin
      file = File.open(filename, "rb")
      markdown.render(file.read).html_safe.force_encoding('UTF-8')
    rescue Errno::ENOENT
      render :file => "public/404.html", :status => 404
    end
  end

end

I tried a few ways to define the path to the image file, but it does not show up. When submitting the file URL to Rails, it raises the following error:

No route matches [GET] "/Business_resources_hierarchy.PNG"

How to define the path to the file, or configure the helper so that the image is displayed?

0 Answers
Related