Dancer2 0.205000 improves application speed, deprecates request->dispatch_path

Dancer2 0.205000 is on it’s way to CPAN, and brings with it a number of bug fixes, documentation improvements, and enhancements. The changes with the most potential impact to your existing applications include:

  • Migrating from MooX::Types to Type::Tiny. This will improve the speed of any Dancer2 application automatically.

  • Deprecating request->dispatch_path. This was originally introduced to fix a buggy request->path implementation; fixing request->path caused dispatch_path to incorrectly fail a route match when SCRIPT_NAME was also a prefix of the PATH_INFO. request->path now functions as intended, and is the preferred method of dispatch. request->dispatch_path will throw a warning if used, and will call request->path instead. The method will be removed entirely two releases from now.

  • A new method is being added to Dancer2 applications, prepare_app(). This method will eventually get called automatically when to_app() is invoked. In preparation of this, any application that may already contain a prepare_app() method will complain - loudly - that implementation of this method is coming. Expect to see the final implementation of prepare_app() two releases from now.

Finally, this release saw a large number of community contributions, especially from first-time contributors. The Dancer Core Team is extremely appreciative of the efforts by its users - thanks so much for making Dancer an even better framework!

The full changelog is as follows:

0.205000  2017-03-10 15:37:52-06:00 America/Chicago

* GH #1325: Support multi-value cookies when using HTTP::XSCookies.
  (James Raspass)
* GH #1303: Read configuration options when send_as() creates a new 
  serializer (Paul Williams)
* GH #1290: Properly check buffer length in _read_to_end() (Marketa 
* GH #1322: Deprecate broken request->dispatch_path in favor of 
  request->path. Warn the developer of the deprecation (Russell 
  @veryrusty Jenkins).

* GH #1326: Speed up by using Type::Tiny, again. (Pete SysPete Mottram)
* GH #1318: Add support for the SameSite cookie attribute. (James Raspass)
* GH #1283: Skeleton now provides an example of setting the appdir.
  (Jason Lewis)
* GH #1315: Adjust dist.ini to set "build_requires" for 
  ExtUtils::MakeMaker. (Atoomic)
* GH #1331: Preliminary prepare_app() work (Sawyer X)

* GH #1324: Fix broken link to send_file. (Fabrice Gabolde)
* GH #1311: Typo and link fixes. (Breno G. de Oliveira - @garu)
* GH #1310: Document query string parameters in uri_for. (Michael J South)
* GH #1329: Remove dead code from file upload example (Stefan Hornburg - 
* GH #1256: Additions to migration manual (Daniel Perrett)
* GH #1330: Add middleware examples to scaffolder (David - sbts)

Happy Dancing!

Dancer2 0.204003 fixes missing dependencies, improves error handling

Dancer2 0.204003 is on its way to CPAN now, and provides the following changes:

  • The CPANTS testing service reported that some dependencies for Dancer2 were not specified in the distribution. This has been corrected, and we apologize for any issues this may have caused.
  • When a route exception occurred, Dancer2 would catch the error first, and would prevent any custom exception handling from trapping the exception. There were some ugly hacks for working around this, but this fix puts things right, and lets the exception hook fire first, and then will trap the error.
  • Several changes were made to Dancer2’s Template Toolkit integration, the most significant of which being the removal of the ANYCASE option.
  • Various documentation improvements.

A big thank you to those who contributed to this release and helped get it out the door.

The full changelog is as follows:

0.204003  2017-01-25 15:21:40-06:00 America/Chicago

* GH #1299: Fix missing CPANTS prereqs (Mohammad S. Anwar)

* GH #1249: Improve consistency with Template::Toolkit,
  using correct case for 'include_path', 'stop_tag', 'end_tag',
  and 'start_tag', removing ANYCASE option.
  (Klaus Ita)
* Call route exception hook before logging an error, allowing devs to
  raise their own errors bedore D2 logging takes over. (Andy Beverley)

* Add another example of the delayed asynchronous mechanism
  (Ed @mohawk2 J., Sawyer X)
* GH #1291: Document 'change_session_id' in Dancer2::Core::App.
  (Peter SysPete Mottram)
* Fix typo in Dancer2::Core::Response (Gregorr Herrmann)
* Document Dancer2::Plugin::RootURIFor (Mario Zieschang)

Happy Dancing!

Dancer2 0.204002 is now available, fixes public_dir option, adds plugin convenience

Your early holiday gift from the Dancer Core Team has arrived - Dancer2 0.204002 is on its way to your favorite CPAN mirror. This release provides the following:

  • A fix for public_dir: When using public_dir , Dancer2 now waits for the configuration to be read before deciding where static content should be served from
  • A new plugin helper method, find_plugin(), that lets you import another plugin’s DSL for use in your own custom plugin
  • A variety of documentation fixes and enhancements

Make sure to check out the Dancer Advent Calendar! It features a number of great articles not only from the Dancer Core Team, but a number of our community members too.

The Dancer Core Team would like to thank all of our contributors and community members for another great year. Simply put, you are the reason we keep working hard at Dancer, and we are grateful to have such a great community of users and developers around us. Here’s to a great 2017… Hope you all have a safe and happy holiday season!

Dancer2 0.204001 restores 5.8 support, fixes Test::Perl::Critic dependencies

Dancer2 0.204001 is on its way to a CPAN mirror near you. There are several important updates in this release that are worth noting:

  • Support for Perl 5.8 support has been restored. We used a named capture in a regex in resolving an issue in Dancer2 0.204000 and in the process, made Dancer2 unusable on Perl 5.8. This has been fixed. Thanks veryrusty!

  • Dancer2 0.204000 unintentionally required that Test::Perl::Critic be installed, and that we pass Perl::Critic tests to install properly. This has been reverted. We apologize for the inconvenience.

The full changelog is here:

0.204001  2016-10-17 08:29:00-05:00 America/Chicago

* Restore 5.8 support (fix test which required captures).
  (Russell @veryrusty Jenkins)
* PR #1271: fix wrong regex check against $_ (Mickey Nasriachi)

* GH #1262: Add 'encode_json' and 'decode_json' DSL, which are
  recommended instead of 'to_json' and 'from_json'.
  (Dennis @episodeiv lichtenthäler)

* Fix some typos.(Dennis @episodeiv lichtenthäler)
* GH #1031: Remove D2::Core::Context remnants from docs.
  (Sawyer X)

* GH #1273: Do not require Test::Perl::Critic to install.
  (Dennis lichtenthäler)

Thanks to Dennis @episodeiv Lichtenthäler for contributing to this release.

Happy Dancing!

Dancer2 0.204000 improves app config, content caching, and dependency management

Fresh off of Perl.Dance 2016 is Dancer2 0.204000. The latest version of Dancer2 is on its way to a CPAN mirror near you.

This version brings some compelling enhancements and features:

  • Improved configuration handling (Jonathan Duff):

You can now create a local version of your configuration files which you then do not need to commit to any repository. If you create a file called config_local.yml, you will have a local config.yml. You can do the same with any configuration file, just change the filename to end with _local.

You can now set the DANCER_CONFIG_EXT environment variable in order to only load configuration files of a particular type (such as JSON). For example: DANCER_CONFIG_EXT=json plackup bin/app.psgi

You can now get some diagnostics information about loaded conifguration files by setting the DANCER_CONFIG_VERBOSE environment variable to a true value.

  • Improved static content caching:

Plack::Middleware::Static does not, out of the box, send a 304 Not Modified status for static resources that have not changed since they were last requested. By using Plack::Middleware::Conditional and Plack::Middleware::ConditionalGET, we were able to improve caching for users without a front-end static proxy (Theo van Hoesel).

  • Dependencies have been moved from dist.ini to cpanfile, allowing developers to use [Carton] ( to easily deploy and run Dancer2 apps entirely from a local or deployment directory.

  • If you want to create a sample application skeleton that uses Template Toolkit-style variable markers ([% %]), you can now do so. App skeletons now use [d2% %2d] for variables that Dancer2 needs to produce new application skeletons. Thanks, Jason Lewis!

  • If you need full control of the evals run by Dancer2 (if, for example, you write an eval frame unrolling code), you can now provide your own code to be run via $EVAL_SHIM. Thanks to Yves Orton (demerphq) for contributing!

  • Numerous bug fixes and documentation improvements.

The full changelog is as follows:

0.204000  2016-10-10 20:56:51-05:00 America/Chicago

* GH #1255: Fix hook overriding in plugin. (Yves Orton)
* GH #1191: Named capture prior to dispatch breaks dispatch.
  (Yves Orton)
* GH #1235: Clean up descriptions for HTTP codes 303 and 305.
  (Yanick Champoux)
* Remove duplicate (and errornous) 451 error message.
  (Sawyer X)
* GH #1116, #1245: Ensure cached Hash::MultiValue parameters are cloned
  into the new request. (Russell @veryrusty Jenkins)
* You can now provide a $EVAL_SHIM to Dancer2::Core::App in order
  to have custom code run on eval{} calls. One example of this
  is to handle proper counting of stack frames when you want to
  unwind/unroll the stack for custom error reporting.
  (Yves Orton)
* Added a cpanfile to allow installing local dependencies with 
  carton. (Mickey Nasriachi)
* GH #1260: Specify optional charset to send_file and send_as
  (Russell @veryrusty Jenkins)
* PR #1162: Change skeleton template tags so skeletons can generate
  applications that use Template Toolkit default tags (Jason Lewis)
* GH #1149: Fix config loading inconsistencies, support local config
  files in addition to standard Dancer conf files (Jonathan Scott Duff)
* PR #1269: Stash decoded body_parameters separately from those 
  in Plack::Request (Russell @veryrusty Jenkins)
* GH #1253: Static middleware should send 304 Not Modified to enable
  intermediate level caching. (Russell @veryrusty Jenkins)
* GH #608: Remove extra general COPYRIGHT notice in Tutorial.
  (Sawyer X)
* Simplify upload example. (Alberto Simões, Sawyer X)

Thanks to all the sponsors, attendees, and speakers who participated in this year’s Dancer conference, Perl.Dance 2016. It was another highly successful conference, and we are already looking forward to next year’s gathering. We are currently working on the videos of this year’s talks, and hope to have them uploaded shortly.

If you have any questions, please find us at Happy Dancing!