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