very basic error page + reset the cache for content entries if changes found
did
committed May 23, 2015
commit de7808d323e0a0e106f43566476f834de609be80
Showing 5
changed files with
98 additions
and 8 deletions
Gemfile
+1
-1
| @@ | @@ -18,7 +18,7 @@ gem 'therubyracer' |
| # gem 'locomotivecms_common', github: 'locomotivecms/common', ref: '3046b79893', require: false | |
| # gem 'locomotivecms_coal', path: '../in_progress/coal', require: false | |
| - | # gem 'locomotivecms_steam', path: '../in_progress/steam', require: false |
| + | gem 'locomotivecms_steam', path: '../in_progress/steam', require: false |
| # gem 'locomotivecms_common', path: '../in_progress/common', require: false | |
| group :development, :test do | |
generators/blank/Gemfile.tt
+5
-5
| @@ | @@ -4,18 +4,18 @@ gem 'locomotivecms_wagon', '<%= config[:version] -%>' |
| group :development do | |
| # Mac OS X | |
| - | gem 'rb-fsevent', '~> 0.9.1', require: RUBY_PLATFORM.include?('darwin') && 'rb-fsevent' |
| + | # gem 'rb-fsevent', '~> 0.9.1', require: RUBY_PLATFORM.include?('darwin') && 'rb-fsevent' |
| # Unix | |
| - | gem 'therubyracer', require: 'v8', platforms: :ruby unless RUBY_PLATFORM.include?('darwin') |
| - | gem 'rb-inotify', '~> 0.9', require: RUBY_PLATFORM.include?('linux') && 'rb-inotify' |
| + | # gem 'therubyracer', require: 'v8', platforms: :ruby unless RUBY_PLATFORM.include?('darwin') |
| + | # gem 'rb-inotify', '~> 0.9', require: RUBY_PLATFORM.include?('linux') && 'rb-inotify' |
| # Windows | |
| - | gem 'wdm', '>= 0.1.0', require: RUBY_PLATFORM =~ /mswin|mingw/i && 'wdm' |
| + | # gem 'wdm', '>= 0.1.0', require: RUBY_PLATFORM =~ /mswin|mingw/i && 'wdm' |
| end | |
| group :misc do | |
| # Add your extra gems here | |
| # gem 'susy', require: 'susy' | |
| # gem 'redcarpet', require: 'redcarpet' | |
| - | end |
| \ No newline at end of file | |
| + | end |
locomotive/wagon/commands/serve_command.rb b/lib/locomotive/wagon/commands/serve_command.rb
+4
-1
| @@ | @@ -47,6 +47,8 @@ module Locomotive::Wagon |
| def require_steam | |
| require 'locomotive/steam' | |
| + | require 'locomotive/steam/server' |
| + | require 'locomotive/wagon/middlewares/error_page' |
| require 'bundler' | |
| Bundler.require 'misc' | |
| @@ | @@ -61,6 +63,8 @@ module Locomotive::Wagon |
| require_relative '../tools/livereload' | |
| config.middleware.insert_before Rack::Lint, Rack::LiveReload, live_reload_port: port | |
| end | |
| + | |
| + | config.middleware.insert_before Rack::Lint, Locomotive::Wagon::Middlewares::ErrorPage |
| end | |
| end | |
| @@ | @@ -97,7 +101,6 @@ module Locomotive::Wagon |
| def build_server | |
| # TODO: new feature -> pick the right Rack handler (Thin, Puma, ...etc) | |
| - | require 'locomotive/steam/server' |
| require 'thin' | |
| app = Locomotive::Steam::Server.to_app | |
locomotive/wagon/middlewares/error_page.rb b/lib/locomotive/wagon/middlewares/error_page.rb
+74
-0
| @@ | @@ -0,0 +1,74 @@ |
| + | require 'erb' |
| + | require 'locomotive/steam/middlewares/threadsafe' |
| + | require 'locomotive/steam/middlewares/helpers' |
| + | |
| + | require 'pry-byebug' |
| + | |
| + | module Locomotive::Wagon |
| + | module Middlewares |
| + | |
| + | # Display a nice page error |
| + | # |
| + | class ErrorPage < Locomotive::Steam::Middlewares::ThreadSafe |
| + | |
| + | include Locomotive::Steam::Middlewares::Helpers |
| + | |
| + | def _call |
| + | begin |
| + | self.next |
| + | rescue StandardError => error |
| + | @error = error |
| + | log_error |
| + | render_error_page |
| + | end |
| + | end |
| + | |
| + | private |
| + | |
| + | def log_error |
| + | log "Error: #{@error.message}".red |
| + | log @error.backtrace.join("\n") |
| + | end |
| + | |
| + | def render_error_page |
| + | _template = ERB.new(template, nil, '-') |
| + | render_response(_template.result(binding)) |
| + | end |
| + | |
| + | def template |
| + | %{ |
| + | <DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
| + | |
| + | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| + | <head> |
| + | <title>Wagon - Rendering error</title> |
| + | </head> |
| + | |
| + | <body> |
| + | <h1>Arrrghhhh, we could not render page</h1> |
| + | <h2><%= @error.message %></h2> |
| + | |
| + | <h3>File: <%= @error.respond_to?(:file) ? @error.file : '?' %></h3> |
| + | |
| + | <h3>Code</h3> |
| + | <% if @error.respond_to?(:code_lines) %> |
| + | <pre> |
| + | <% @error.code_lines.each do |(line, statement)| -%> |
| + | <strong><%= line %></strong> <%= statement %> |
| + | <% end -%> |
| + | </pre> |
| + | <% else %> |
| + | <p><i>No code</i></p> |
| + | <% end %> |
| + | |
| + | <h3>Back trace</h3> |
| + | <%= @error.backtrace.join("<br/>") %> |
| + | |
| + | </body> |
| + | </html>} |
| + | end |
| + | |
| + | end |
| + | |
| + | end |
| + | end |
locomotive/wagon/tools/listen.rb b/lib/locomotive/wagon/tools/listen.rb
+14
-1
| @@ | @@ -41,11 +41,24 @@ module Locomotive::Wagon |
| Proc.new do |modified, added, removed| | |
| resources.each do |resource| | |
| Locomotive::Common::Logger.info "service=listen action=reload resource=#{resource} timestamp=#{Time.now}" | |
| - | cache.delete(resource) |
| + | |
| + | clear_cache_for(resource, modified + added + removed) |
| end | |
| end | |
| end | |
| + | def clear_cache_for(resource, files) |
| + | keys = case resource |
| + | when :sites then '_sites' |
| + | when :content_entries |
| + | files.map { |f| "site_1_content_type_#{File.basename(f, '.yml')}_content_entries" } |
| + | else |
| + | "site_1_#{resource}" |
| + | end |
| + | |
| + | [*keys].each { |key| cache.delete(key) } |
| + | end |
| + | |
| end | |
| end | |