GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Plack::Middleware::AutoRefresh(3) User Contributed Perl Documentation Plack::Middleware::AutoRefresh(3)

Plack::Middleware::AutoRefresh - Reload pages in browsers when files are modified

    # in app.psgi
    use Plack::Builder;

    builder {
        enable 'Plack::Middleware::AutoRefresh',
               dirs => [ qw/html/ ], filter => qr/\.(swp|bak)/;
        $app;
    }

Plack::Middleware::AutoRefresh is a middleware component that will reload you web pages in your browser when changes are detected in the source files. It should work with any modern browser that supports JavaScript and multiple browsers simultaneously.

At this time, this middleware will only work with backend servers that set psgi.nonblocking to true. Servers that are known to work include Plack::Server::AnyEvent and Plack::Server::Coro. You can force a server with the "-s" or "--server" flag to "plackup".

    dirs => [ '.' ]                     # default
    dirs => [ qw/root share html/ ]

Specifies the directories to watch for changes. Will watch all files and subdirectories of the specified directories for file modifications, new files, deleted files, new directories and deleted directories.

    filter => qr/\.(swp|bak)$/           # default
    filter => qr/\.(svn|git)$/
    filter => sub { shift =~ /\.html$/ }

Will apply the specified filter to the changed path name. This can be a regular expression or a code ref. Any paths that match the regular expression will be ignored. A code ref will be passed the path as the only argument. Any false return values will be filtered out.

    wait => 5                           # default

Wait indicated the maximum number of seconds that the client should block for while waiting for notifications of changes. Setting this to a lower value will not improve response times.

This component was inspired by NodeJuice (<http://nodeJuice.com/>). NodeJuice provides very similar browser refresh functionality by running a standalone proxy between your client and the web application. It is a bit more robust than Plack::Middleware::AutoRefresh as it can handle critical errors in your app (ie, compile errors). Plack::Middleware::AutoRefresh is simpler to setup and is limited to Plack based applications. Some of the original JavaScript was taken from nodeJuice project as well, although it was mostly rewritten prior to release. Thank you to Stephen Blum the author of nodeJuice.

A huge thank you to the man behind Plack, Tatsuhiko Miyagawa, who help me brainstorm the implementation, explained the inners of the Plack servers, and re-wrote my broken code.

Plack::Middleware::AutoRefresh accomplishes the browser refresh by inserting a bit (1.2K to be precise) of JavaScript into the (x)html pages your Plack application on the fly. The JavaScript tries to have minimal impact: only one anonymous function and one global flag (window['-plackAutoRefresh-']) are added. The JavaScript will open an Ajax connection back to your Plack server which will block waiting to be notified of changes. When a change notification arrives, the JavaScript will trigger a page reload.

NodeJuice at <http://www.nodejuice.com/>.

Modules used to implement this module AnyEvent::Filesys::Notify.

And of course, Plack.

Please report any bugs or suggestions at <http://rt.cpan.org/>

Mark Grimes, <mgrimes@cpan.org>

Copyright (C) 2010 by Mark Grimes

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.2 or, at your option, any later version of Perl 5 you may have available.

2022-04-09 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.