Release 2012.12.08

Ramaze 2012.12.08 has just been released after being delayed for several months. As mentioned in the previous release announcement this release is not backwards compatible. Because of this it is recommended to carefully read this Email as well as the upgrade notes which can be found here:

This new version can be installed as following:

$ gem install ramaze


$ gem install ramaze -v 2012.12.08


  • Bug fix for the Sequel cache that would cause it to store session data for all users.
  • Ramaze::Cache is now app-aware instead of always using "pristine" for the unique identifier. See commit edabd3c9a476854b72fe2caaa60b25d6c6e60aff for more information.
  • A bug in generate_mapping has been fixed, this bug would cause it to sometimes incorrectly map URLs and controllers.
  • Session IDs are re-generated when logging a user out using the User helper.
  • After uploading a file using the file helper the file handle is closed instead of leaving the file as is.
  • Big performance increase due to changes in Innate (more on this below).
  • Escaping of % sequences when using the Syslog logger.
  • Lots of old code such as helpers, loggers and snippets have been removed (see the upgrade notes for the specific details).
  • Various documentation changes such as spelling errors and formatting.
  • CSRF tokens no longer expire until the session is destroyed, this makes it possible to use the same session in multiple browser windows/tabs.
  • Various changes for Ramaze developers to make it easier to develop and release new versions of Ramaze.


As mentioned in this Email and the previous release announcement this version is not backwards compatible. A while ago Michael introduced a change in Innate that speeds it up tremendously by caching various parts of Innate that don't change during runtime. This change however meant some code had to be removed, this in turn gave us a chance to change a few things in Ramaze/Innate in terms of how it handles middleware.

For those who want to upgrade to this new version I strongly recommend you to read the upgrade notes mentioned above. These notes explain what has been removed and how to change your code so that it works with the new version of Ramaze.

If you happen to bump into any issues or are simply confused feel free to open an issue on the Github issue tracker or pop in #ramaze on Freenode.

Ramaze 2012.04.14

Ramaze 2012.04.14 was just released, this release is mostly a bug fix release. This release does not contain any of the Innate/Ramaze improvements as mentioned in the previous release announcement, those will be put in the next release (of which the date has not yet been confirmed).


  • The Redis adapter (Ramaze::Cache::Redis) has been fixed so that it works with sessions, previously this would result in "Can't convert into symbol" errors and the like. This problem was caused by not encoding data using Marshal. Thanks to EdvardM for reporting the issue.
  • The Redis cache adapter namespaces keys just like the other adapters.
  • Ramaze::Cache::MemCache has been updated for the latest version of Dalli and should no longer display deprecation warnings. The minimum required version of Dalli has been set to at least 2.0.2.
  • Various documentation improvements and additions.
  • The HTML of the pagination helper can now be customized, thanks to Leucos and bougyman for adding it.

I also like to remind you that the next release of Ramaze will not be backwards compatible with previous releases. This is because manveru made a few changes to Innate that make it a lot faster, this change however, required the removal of the middleware compiler (in order to keep Innate under 2k LOC). In the coming days Ramaze will be updated so that it will work properly with these changes. An announcement will be made when these changes have been comitted so that developers can prepare for this release.

As always, for any information or questions you're more than welcome to join the IRC channel #ramaze on freenode.

Release 2012.03.07

Today marks the day of another Ramaze release, Ramaze 2012.03.07. With this release also comes a new version of Innate, also 2012.03. A full list of the changes of both frameworks can be found below.

However, there is one important change that you should be aware of: Ramaze is no longer dual licensed under the GPL/Ruby licenses but instead is now licensed under the MIT license. This license gives more freedom and is a lot easier to understand. For those interested the conversation that started the idea of changing the license can be found here:

Changelog for Ramaze

  • Various documentation improvements, massive thanks to John Pagonis for his contributions.
  • CSRF tokens are re-generated on valid requests. This fixes the problem of these tokens being invalidated after 15 minutes regardless of valid requests being executed or not.
  • View adapters automatically install required Gems using Ramaze.setup().
  • Support for the Slim template engine thanks to Marc Weber.
  • Various small code cleanups such as the removal of trailing whitespace, YARD formatting issues, etc.

Changelog for Innate

  • Fixed various YARD formatting issues.
  • The render helper can now render views that don't have corresponding methods when the trait :needs_method is set to true. This means that for example render_view(:foo) works if there's a view "foo" but not method "foo()". Previously doing this would trigger an error saying the render call required a method.
  • Fixed an issue for Rack::Cascade in Rack 1.4.1.
  • The speed of Innate::Cache has been improved and should trigger less warnings.

Upcoming Changes

With this blog post I'd also like to announce some upcoming changes in both Innate and Ramaze. Earlier today Michael managed to make some patches for Innate that resulted in a massive performance increase (from 300 reqs/sec to around 2000).

However, for this patch to be pulled into Innate various changes have to be made which in turn would lead to Innate using more than 2k LOC. To work around this we've been thinking of throwing a few things (that were annoying in the first place) away. These are Innate::Session and the middleware compiler. The former isn't a huge issue as Rack already has a perfectly fine way of handling sessions. The latter however is a very big change and will break a lot of existing applications out there, hence this announcement.

The removal of the middleware compiler would mean that all the methods related to "compiling" the middleware list (methods such as Innate.middleware!) will be removed, thus breaking existing code that relies on the presence of these methods.

The advantage of this is that both Innate and Ramaze will instead use the code provided by Rack, thus making it easier for us to maintain both frameworks as well as making it easier for others to use Rack middlewares without having to learn how to use the middleware compiler.

While none of these changes have been pushed to Github yet it's more than likely that this will happen in the near future as we agreed that such big performance improvements were worth the effort of breaking existing code. Once we have determined in which version these changes will be included I'll send another email to notify developers so that they can prepare themselves and their projects.

Release 2011.12.28

This release is a relatively small release containing only a few changes:

  • Ramaze has been updated to work with the newest version(s) of Rack as 1.4 introduced a few changes related to dealing with static files.
  • A few variables that were shadowed by other variables have been renamed.
  • A few small changes to the documentation.
  • The CSRF helper now uses request.ip/ instead of directly using request.env. The latter would cause issues when proxying requests to Ramaze (e.g. when running it on Heroku).

Innate has also been updated (new version is 2011.12) to work with Rack 1.4. Because of the changes in Rack Ramaze 2011.12.28 requires Innate 2011.12 or greater.

Release 2011.10.23

Ramaze users,

Today marks the day of a new Ramaze release. It took a while for a new release to show up (the last one was in July) but don't worry, it was worth the wait. Below is a list of the most important changes and additions.

  • BlueForm's input_checkbox method now takes a hash or array as it's checked value (on top of a normal string based value). This makes it possible to select multiple checkboxes. See commit b82571a1b5c933f465c3af0d4965348298a57664 for more information.
  • Lars Olsson contributed an upload helper (Ramaze::Helper::Upload) that makes it easy to handle uploaded files.
  • ramaze/rest has been removed as it didn't even work properly.
  • Ramaze::Helper::Layout has been re-written so that multiple calls to set_layout() don't remove previous layouts. See 05cc35a477c838633b6c176803a6e413af749eff for more details on this change.
  • Ramaze.setup has been updated so that it works with the most recent version of Rubygems as well as with older versions. This should prevent any deprecation warnings from popping up.
  • Mustache templates can now use the .mustache extension.
  • The blog example has been re-written from scratch (examples/app/blog).
  • A cache driver for Redis has been added (Ramaze::Cache::Redis).
  • Ramaze now runs on all available Ruby distributions such as REE, Rubinius and 1.9.3.

Another massive change is that starting with this release Ramaze will no longer use Sphinx for it's user guide but instead now uses a fully YARD based documentation. More information on this change can be read in the following Email:!topic/ramaze/W4WFof2ePMg

Release 2011.07.25

The Ramaze team is proud to announce the release of Ramaze version 2011.07.25. This new release contains quite a few changes so it's best to read through them carefully.

  • Ramaze::Log::RotatingInformer can now be used as a Rack middleware.
  • Ramaze::Helper::Layout#set_layout has been modified in such a way that it's easier to specify method specific layouts, see commit 0d15a29c960e22761456180a6be7b88c3809eba8 or lib/ramaze/helper/layout.rb for more information.
  • All remaining ETag issues have been solved.
  • Ramaze::Cache::Sequel has been re-written, massive thanks to Lars Olsson for the contribution. See commit c5587c0d3feda8ca2c89399418ac1132d0236fcb or lib/ramaze/cache/sequel.rb for more information.
  • Ramaze::Cache::MemCache has been re-written and now uses Dalli. See commit 016b2d225d601a71479698e40886b15aaeaa32ec or lib/ramaze/cache/memcache.rb for more information.
  • Pathname errors have been resolved.
  • The layout of the prototype has been updated to reflect the new design of the website.
  • Ramaze::Helper::BlueForm#input_checkbox and Ramaze::Helper::BlueForm#input_radio now accept the options :show_label and :show_value which can be used to show/hide the values/labels of these methods.
  • The Email contribution has been moved to Ramaze::Helper::Email and had several cleanups.
  • The HTTP Digest helper has been removed in favor of Rack::Auth.
  • User objects are no longer stored in the session when using Ramaze::Helper::User, it may not always be possible to Marshal these objects.
  • Several changes have been made for those developing Ramaze itself.
  • A new shiny Ramaze executable, see commit cd9fa64138324a5af061daafbd8e7307726843ed or the files in lib/ramaze/bin/ for more information.
  • Ramaze::View::Less, Ramaze::View::RedCloth and Ramaze::View::Maruku have been removed. Less is no longer supported without Node.js, RedCloth could not be compiled on systems running relatively new versions of GCC. On top of that both RedCloth and Maruku weren't used as view drivers.
  • Ramaze::Helper::BlueForm#input_checkbox and Ramaze::Helper::BlueForm#input_radio no longer generate a hidden field as this would generate Rack errors (they also weren't that useful).
  • General code cleanups and more documentation.

The user guide will be updated in the coming days to reflect these changes. If you have anything to add yourself feel free to submit a pull request and we'll take a look at it.

Happy hacking!