Skip to content

Instantly share code, notes, and snippets.

@WattsInABox
Last active July 5, 2024 09:36
Show Gist options
  • Save WattsInABox/8620783 to your computer and use it in GitHub Desktop.
Save WattsInABox/8620783 to your computer and use it in GitHub Desktop.
Generate Static HTML Website Using Ruby on Rails
# Ignore static version of the site (used to upload error pages to S3 for Heroku errors)
/out
# config/database.yml
development: &development
adapter: postgresql
database: workherder_development
host: localhost
username: postgres
password:
static:
<<: *development
group :development do
gem 'heel' # used to server the static site from the /out directory
end
# lib/tasks/generate_static_error_pages.rb
# Original idea from http://blog.atlashost.eu/post/ruby-on-rails-a-static-site-generator.html
namespace :static do
desc 'Generate static site in ./out/ directory'
task :generate => [
'assets:clean',
'assets:precompile',
:start_rails_server,
:stop_rails_server
] do
Dir.mkdir 'out' unless File.exist? 'out'
Dir.chdir 'out' do
`wget -mnH http://localhost:3001/`
end
`rsync -ruv --exclude=.svn/ public/ out/`
end
desc 'Start a Rails server in the static Rails.env on port 3001'
task :start_rails_server do
# run on 3001 in case we're already running a server on 3000
`RAILS_ENV=static rails s -p 3001 -d`
end
desc 'Stop any process running on port 3001'
task :stop_rails_server do
# hopefully it is the Rails server that is runing in the static Rails.env
`lsof -i :3001 | awk '{print $2}' | grep -v PID | xargs -I {} kill {}`
end
desc 'Start a server using heel on port 8000 that will server our static site'
task :start_static_server do
Dir.chdir 'out' do
`heel --daemonize --port 8000`
end
end
desc 'Stop the static server that is running using heel'
task :stop_static_server do
`heel --kill`
end
end
# config/environments/static.rb
require File.expand_path('../development', __FILE__)
# environment for serving static pages like error pages to upload to S3
Workherder::Application.configure do
config.serve_static_assets = true
# Compress JavaScripts and CSS
config.assets.compress = true
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
# Generate digests for assets URLs
config.assets.digest = true
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment