How to render a plain HTML file with Sinatra?

2019-02-04 10:31发布

问题:

I have a simple sinatra application. All I want to do is use it as a wrapper to serve a static HTML file at a specific route. My directory structure looks like this:

/directory
    myhtmlfile.html
    app.rb

My app.rb file looks like this:

require 'sinatra'

get '/myspecialroute' do
    html :myhtmlfile      # i know html is not a method, but this is what I would like to do
end

How can I write this so that I can keep my html file a plain html file but serve it at a special route?

Solution:

Thanks to this, I learned a few different ways to do it:

get '/myspecialroute' do
  File.read('myhtmlfile.html')
end

This will open, read, close, then return the file as a string.

Or there is a helper function to make this cleaner:

get '/myspecialroute' do
  send_file 'myhtmlfile.html'
end

回答1:

Does send_file do what you want?

e.g.

  get '/myspecialroute' do
     send_file 'special.html'
  end


回答2:

You can do it like this:

get '/myspecialroute' do
  redirect '/myspecialroute.html'
end


回答3:

This is work for me:

require 'rubygems'
require 'sinatra'

get '/index.html' do
    @page_title = 'Home'
    @page_id = 'index.html'
    erb :'index.html', { :layout => :'layout.html' }
end


标签: ruby sinatra