Merge Files and Documents - Design Wireframes Posted

Added by Eric Davis on July 29, 2010 in Home Community Code Themes

Wireframe of the proposed UI

Shane Pearlman from the Redmine UX team has created some wireframes for his proposed changes to Redmine's File and Document modules. The Redmine teams are thinking about merging the two modules together into a single Media Library module. The UX team is still looking for more feedback on the designs. If you are a heavy user of these modules or want to help contribute to Redmine's direction, please reply on the forum thread.

Redmine 1.0 Feature: Caching Text Formatting

Added by Eric Davis on July 20, 2010 in Home Community Code

One of the new features included in Redmine 1.0 is the ability to cache the text formatting. Each time Redmine displays any text markup, like Textile, it has to run the text through a conversion process to get HTML. This means that an issue with 30 comments will run this conversion runs 31 times, once for the issue description and once for each comment.

The Cache Text Formatting feature will take the results of that conversion and save it so the next time that HTML is needed, the conversions can be skipped. By default this is off but it can be turned on by in the Administration Settings with the option "Cache formatted text".

Cache Formatted Text Setting

It uses Ruby on Rails' MemoryStore for caching. This will save the cached data to the memory of the running Ruby process. But it can replaced with any other Cache Store. For example, I just setup a memcached cache for using the following configuration:

# config/additional_environment.rb
config.gem 'memcached' # For other hosts
# config.gem 'memcached-northscale', :lib => 'memcached' # For
require 'memcached'
config.cache_store = :mem_cache_store,

If you are interested in more details about this feature, checkout issue #4482 and my blog post where I went through how the text formatting works in more detail.

BugMash 1.0 Results

Added by Eric Davis on June 21, 2010 in Home Community Code

This weekend we held the first ever Redmine BugMash. 21 bugs were fixed, including everything needed for the upcoming 0.9.5 release.

  1. pre can't be inside p
  2. projects.atom with required authentication
  3. Week number calculation in date picker is wrong if a week starts with Sunday
  4. mail handler fails when the from address is empty
  5. Member role forms in project settings are not hidden after member added
  6. session cookie path does not respect RAILS_RELATIVE_URL_ROOT
  7. External links not correctly displayed in Wiki TOC
  8. "fiters" and "options" should be hidden in print view via css
  9. Ellipses at the end of snippets shouldn't be textilized
  10. NoMethodError (undefined method `[]' for nil:NilClass)
  11. Add a hook to the issue report (Summary) view
  12. Ruby 1.9 - wrong number of arguments (1 for 0) on rake db:migrate
  13. Ruby 1.9 - when attempting to change password error raised IOError in MyController#password
  14. SVN Repository: Can not list content of a folder which includes square brackets.
  15. Navigation to the Master Timesheet page (time_entries)
  16. redmine:email:receive_imap fails silently for mails with subject longer than 255 characters
  17. Fewer SQL statements generated for watcher_recipients
  18. Exclude "fields_for" from overridden methods in TabularFormBuilder
  19. TimelogController#destroy assumes success
  20. Search for Numeric Value
  21. Login and mail should not be case sensitive

I also wanted to especially thank the participants who where able to get a patch contributed:

  • Andrew Fenn
  • Greg Mefford
  • Gregor Schmidt
  • Holger Just
  • Jan
  • Jean-Baptiste Barth
  • Jérémy Lal
  • Yuki Kita
  • and many others who helped out on IRC this weekend.

Because of the success of this BugMash, we are considering having another one. So if you weren't able to participate this time, there will be another one soon. If you're interested in helping out, as a participant or an organizer, leave a comment below.

BugMash 1.0

Added by Eric Davis on June 14, 2010 in Home Community Code

I'm organizing the first Redmine BugMash this weekend. It's loosely based off the Rails Bridge BugMash with the goals of:

  1. cleaning up Redmine for the 1.0 release and
  2. getting more people contributing to Redmine

I'll be working on the Wiki pages for the event as well as putting together a list of issues I'd like to resolve. If you have some time and would just to join, stop by irc this weekend and we'll help you get started.

Redmine Client - Access the Redmine API in Ruby

Added by Eric Davis on April 22, 2010 in Home Code

Redmine 1.0 will include a REST API so I've started to build a Rubygem to make accessing the API in Ruby easy. So far redmine_client has support for all of the current APIs in Redmine, including:

  • Read/write support for Issues
  • Read/write support for Projects
  • Read support for News

Installation is an easy gem install redmine_client and it's used just like ActiveResource. For example to change Issue #19000 on the site using the "bob" user:

require 'rubygems'
require 'redmine_client'

RedmineClient::Base.configure do = ''
  self.user = 'bob'
  self.password = 'somepassword'

issue = RedmineClient::Issue.find(19000)
issue.subject = "Changed via the API"

Both the Redmine API and the redmine_client are under development so I'll be adding new features over the next few months up to Redmine 1.0. Feel free to fork the project on Github and hack away at it.

YARD - Local Redmine Documentation Download

Added by Eric Davis on April 10, 2010 in Home Code


Redmine has a large codebase and sometimes it's hard to find the class or method that you need for your custom development. Since I recently added support to Redmine for YARD (a powerful Ruby documentation tool) I figured that I'd post the generated documentation here.

YARD generates HTML documentation from Redmine's code comments, so it's fully automatic. I like YARD over RDoc because it has a better design and has a JavaScript search builtin.

To install, just extract one of these zip files and open the index.html in a web browser. Instant local documentation!

If you want to regenerate the documentation from your Redmine, just install the YARD gem (gem install yard) and run rake yard while in the Redmine root directory.

If you want to improve the documentation or code comments, feel free to submit a patch to Redmine and we will integrate it into the core.

Redmine Continuous Integration Server

Added by Eric Davis on March 24, 2010 in Home Code Community

Finnlabs CI Server

The development group at finnlabs have setup a continuous integration server for Redmine at It's currently testing the entire range of supported Ruby versions and databases with Redmine (and some versions that aren't fully supported yet):

  • Redmine 0.9.x on MySQL with Ruby 1.8.7
  • Redmine 0.9.x on Postgres with Ruby 1.8.7
  • Redmine 0.9.x on Sqlite3 with Ruby 1.8.7
  • Redmine trunk on MySQL with Ruby 1.8.7
  • Redmine trunk on Postgres with Ruby 1.8.7
  • Redmine trunk on Sqlite3 with Ruby 1.8.7
  • Redmine 0.9.x on MySQL with Ruby 1.9.1
  • Redmine 0.9.x on Postgres with Ruby 1.9.1
  • Redmine 0.9.x on Sqlite3 with Ruby 1.9.1
  • Redmine trunk on MySQL with Ruby 1.9.1
  • Redmine trunk on Postgres with Ruby 1.9.1
  • Redmine trunk on Sqlite3 with Ruby 1.9.1
  • Redmine 0.9.x on MySQL with Ruby jruby
  • Redmine 0.9.x on Postgres with Ruby jruby
  • Redmine 0.9.x on Sqlite3 with Ruby jruby
  • Redmine trunk on MySQL with Ruby jruby
  • Redmine trunk on Postgres with Ruby jruby
  • Redmine trunk on Sqlite3 with Ruby jruby

It's hooked up to the official Redmine repository so every code change will run the tests to make sure nothing was broken and report to the #redmine IRC channel. This will really make it easy for the Redmine developers to make sure Redmine runs correctly on the broadest set of platforms it can.

Thanks Holger Just, Gregor Schmidt, Konstantin Haase, and the rest of the team at finnlabs for managing this resource for the Redmine community.

Community Update #6

Added by Eric Davis on January 21, 2010 in Home Code Community Plugins Themes

There's been a lot of activity in the Redmine community over the past few months. Here are some highlights from November 2009:

Code changes

Close versions

Versions can now be given a status which will close a version, preventing assigning new issues to it (#1245). This is great if you want to prevent adding additional features to a version, like during a release process. The three version statuses are:

  1. open: no restriction
  2. locked: can not assign new issues to the version
  3. closed: can not assign new issues and can not reopen assigned issues

Url to fetch changesets for a repository

In #2925 a new action was added to allow fetching the changesets for a repository to be triggered by a url. This means that when: is called Redmine will fetch all of the changesets for all projects.

You can also specific only one project to fetch with

Update trackers from the issue form

Feature #2405 changed the issue form so the Tracker Type can be changed as part of an issue update. This means that if a Feature was entered incorrectly as a Bug, it can be updated directly. Doing this used to require Moving the issue first.

Add or remove columns from the issue list

Feature #4272 adds a new set of options to the Issues list filters. Now you can add, remove, and reorder columns on the fly. I've found this useful for running reports on the issues like: "What are the target versions of issues that have an estimate, are due this week, and are assigned to someone?".

Tree based menus

Redmine will now support Tree based menus. This means any of the menus (the project menu, the top menu, the administration menu) can now have submenus and submenus. The Redmine core isn't taking advantage of this change yet, but some plugins have created additional menus and I suspect this will be used more in the near future.

The feature request shows an example of how the menus are structured as well as how to use the new API.

Allow custom fields for Versions

#4219 added support for defining custom fields on Versions.

Copy and Move

A 'Copy' check box was added to the Issue Move form. This will make it easy to copy multiple issues to another area of Redmine (e.g. different project, different Tracker). Added for Feature #1847.

Managers able to create subprojects

#2963 fixed a bug so users with the "Add Project" permission can now create sub projects. Before, they could only create top level projects.

"View Issues" user permission

#3187 adds a new permission "View Issues". This permission has always been "on" for users but now it is possible to turn it off if you don't want someone to see the issues list at all.

Allow [#id] as subject to reply by email

When the Email Receiving option is Redmine is configured, sending an email with the subject line of:

Subject: [#101]

would not find issue #101 correctly. Bug #3653 corrects this.

child_pages wiki macro on with ?version in URL

#4152 added the ability to specify a specific page version when using the child_pages wiki macro.

Community Events

6 new themes from Rajesh Krishnan

Rajesh Krishnan has released 6 new themes for Redmine. Each one has a different color scheme with some minor variations. If you're looking for a new theme for your Redmine, check them out.

Screenshot pasting plugin

Jean-Philippe Lang posted a quick plugin for Redmine that shows how a screenshot can be pasted directly into the issue form using a Java applet.

Redmine Harvest plugin

Jim Mulholland created a plugin to integrate Harvest time tracking into Redmine. He includes a short screencast of how it works on his blog post.

Scrum PM plugin

Marcin Jędras is working on a Scrum plugin for Redmine. It current supports some drag and drop planning but he's planning to add more features in the next releases.

iRedmine - iPhone app

Thomas Stägemann has released an iPhone app for Redmine called iRedmine. It's released under the GPL and the code is available on Github. I've tried it out and it's a great start. There are still some bugs but I've already found it useful, especially while traveling.

Community Update #5

Added by Eric Davis on December 07, 2009 in Home Community Code Plugins

There's been a bunch of activity in the Redmine community lately. This post will highlight some of the major changes from September and October.

Code changes


Jean-Philippe Lang added group support to the Redmine trunk. This makes it easy to assign a set of people to each project. Each group can be given an existing Role in Redmine so you can control their permissions using the existing settings. Added in r2869 for Issue #1018.

Attachments are added to an issue even during a failed save

A bug was fixed when a user would:

  1. Try to post an update to an issue with a file attachment.
  2. The update failed because someone else updated the issue first.
  3. Attachments would still be added to the issue, without a journal entry.

r2875 changed this so the attachments would be deleted if the update failed (step #3). I don't agree with the behavior, I'd rather have Redmine store the attachments and then try to reattach them after the user resubmits. Added for Issue #3846.

Include spent time in the Activity

When time is logged to a project, it can now be included as part of the Activity stream. This also works on the cross-project Activity stream (e.g. Added in r2877 for Issue #3809.

Customize the Issue filters on custom queries

Issue #2883 added the ability to edit the filters on a custom query. So if you use custom queries for reporting, you can now add or remove filters to modify the data that's displayed without having to edit the custom query itself.

Remove Watchers

Jean-Philippe Lang added the ability to remove issue watchers in r2977. I've been missing this feature for some time, since I use watchers to make sure specific people are notified of changes to issues.

Hide user profiles if they have no visible activity

User profiles (at /account/show/user-id) are now hidden unless the user has any public activity. This will be useful to hide user accounts who should not be listed in the public. Added in r2986 for Issue #3720.

Community Events

Backlogs plugin

Mark Maglana released the Backlogs plugin, a plugin that will help a team visualize the work in progress and work remaining. The announcement contains a url to a demonstration of the plugin.

Workload plugin

Christopher Mann created a Workload plugin for Redmine. It looks interesting and might compliment the Schedules plugin. The plugin can be downloaded from the forum thread or from Github.

Amazon S3 storage plugin

Christopher Dell has created a plugin that will let Redmine save file uploads to Amazon's S3 service. I'm extremely interested in this, since S3 storage is very cheap and makes hosting Redmine in the cloud a lot easier. I'm planning on trying out the plugin and posting a review of it here.

Bugzilla migration script

Ralph Juhnke has posted a new migration script to convert a Bugzilla install to Redmine. His script has been posted to Github and should work with both Redmine 0.8.x and trunk.

Redmine Repository Controls plugin

Brian created the Redmine Repository Controls plugin. This plugin allows more fine grained repository access control and permissions, based on Subversion's SVNAuthz file. It currently only supports Subversion but he's left the ability to support any SCM that uses WebDav. More information can be found on it's Google Code page.

Redmine Risk plugins

Daniel Neis Araujo and Nicolas Bertet both created two different risk management plugins for Redmine. The plugins are both trying to make it easy for Redmine users to define and evaluate the different risks that are involved in a project. As I haven't looked at either one yet, if you are using one please let me know what you think in the comments.

Community Update #4

Added by Eric Davis on November 30, 2009 in Home Code Community Plugins

I have a lot of updates from Redmine for the Community Updates so I'm going to split them into a few posts. This update will cover events from July 13th through September 1st.

Code changes

Git Branch support

Adam Soltys created a patch to add branch support for the git SCM repository. This patch will let you browse through all of the branches in a git repository including the revisions and diffs. It's gone through a few bug fixes but I've had some great experience using it in production on my Redmine so far. This was committed in r2840 for Issue #1406.

If you would to try this out, my Stuff To Do project is public.

Exporting a custom issue query to PDF will use the custom columns

In r2841 Jean-Philippe Lang fixed a bug that prevented custom columns from working with the issue list PDF export.

Journal entry in Issue not displaying correctly

I added a small tweak to the Journal entries (Issue notes) so any lists are aligned properly when Gravatars are enabled or disabled. Committed in r2848 for Issue #3771.

Community Events

Wiki Extensions plugin

Haru Iida has made several updates to his Wiki Extensions plugin. It's under rapid development so if you're interested in it I'd recommend watching the forum thread about it.

Code Review plugin

Haru Iida also released a few new versions of the Code Review Plugin with a bunch of bug fixes and compatibility updates. You can find the release notes in these forum topics: Code Review Plugin 0.2.0 Released. and Code Review Plugin 0.2.7 Released..

NewIssueAlerts plugin

chantra created a new plugin called NewIssueAlerts. When it's installed, it will let you setup a Redmine project to add an email address into the new issue email notification. This would be useful to notify specific people whenever an issue is created. You can read about the plugin on the forum thread and download the plugin from Github

Global Filter Plugin

Kumudha Rangachari posted the Global Filter plugin which will display a list of your global filters on the Redmine homepage. This would be very useful if you use saved Queries a lot and need to navigate to them quickly. The wiki page has some documentation as well as the Readme file on the Github project.

It also includes a related change which I think is interesting. On the issue list there will be a new set of filters which can be used to further the issue list to show only specific projects. This is visible on the wiki page in the screenshot at the very bottom. Personally, I think this feature would be good to be included in the Redmine core.

Default Assigned User

Robert Chady created a plugin that adds the ability to automatically assign an issue to a default user when it's created. I'm thinking of using this on my smaller projects, where one person is responsible for the majority of the work. You can get the plugin from Github and read about it in Issue #482.

I'm thinking about writing these posts at the end of every month. Let me know if you like that idea in the comments below.

Embedding Github's Gist into Redmine

Added by Eric Davis on November 11, 2009 in Home Code Plugins

Github provides a service called Gist, where you can share snippets of code or text with others. What I like about Gist compared to other sites is that you can copy and edit other people's Gists to improve them. Yasushi Abe wrote a very simple plugin for Redmine that gives Redmine the ability to embed a Gist into the Wiki. Once it's installed, it's used by calling the gist macro with the Gist id like gist(113685).

Here's an example of using it on a wiki page:

Gist embedded in an issue

And another example of using it on an issue's page:

Gist embedded in an issue

Since the plugin is so short, I'm going to include the entire plugin here. To install it, just create a directory called vendor/plugins/redmine_gist and copy this file into it.

### Also available from
# vendor/plugins/redmine_gist/init.rb
require 'redmine'
require 'open-uri'

Redmine::Plugin.register :redmine_gist do
  name 'Redmine Gist embed plugin'
  author 'Yasushi Abe <>'
  description 'This is a plugin for Redmine'
  version '0.0.1'

  Redmine::WikiFormatting::Macros.register do
    desc "gist embed"
    macro :gist do |obj, args|
      javascript_tag(nil, :src=>"{args[0]}.js") unless args.empty?


One thing I did discover is that the Gist system doesn't allow sharing private Gists this way. So you will have to make sure that any Gist you post is public.

Let me know in the comments if you're using this plugin and what you are using it for.

Eric Davis

Asynchronous Email Delivery

Added by Eric Davis on October 09, 2009 in Home Code

I wanted to share a simple performance tweak for Redmine's email notifications that you might not know about


Redmine sends email notifications when an event happens, like an issue update. This happens entirely within the HTTP request/response cycle; so if your email server is slow, Redmine will also be slow because it's waiting on the server to respond. The basic steps Redmine takes during an issue update is:

  1. User updates issue #100 with a new comment
  2. Redmine saves the comment to the database
  3. Redmine connects to the email server to deliver the email notifications
  4. The email server receives the connection and sends the email
  5. Redmine redirects the User to the updated issue #100

So if the emailing steps (#3 and #4) take a long time, the user would have to wait for the email server to send the email before the user saw the new page. If we can bypass the email steps, the user would be able to do keep working while the email is processed.

The standard Rails way for bypassing the email server is to use a message queue and run a background process to send emails. There is a specialized Rails plugin that can do this for email, called ar_mailer. But Redmine comes with another option that is trivial to setup and gives good enough performance. This option is the :async_smtp and :async_sendmail delivery_methods, added in issue #613. To configure them, all you have to do is to change one option in your config/email.yml and restart Redmine.

SMTP configuration example

  # Was  "delivery_method: :smtp"
  delivery_method: :async_smtp
    tls: true
    address: ""
    port: 587
    domain: ""
    authentication: :plain
    user_name: ''
    password: 'plugins'

Sendmail configuration example

  # Was  "delivery_method: :sendmail"
  delivery_method: :async_sendmail

How it works

The code for this is so trivial, I'm going to include it entirely in this post:

### From config/initializers/10-patches.rb

# Adds :async_smtp and :async_sendmail delivery methods
# to perform email deliveries asynchronously
module AsynchronousMailer
  %w(smtp sendmail).each do |type|
    define_method("perform_delivery_async_#{type}") do |mail|
      Thread.start do
        send "perform_delivery_#{type}", mail

ActionMailer::Base.send :include, AsynchronousMailer

The guts of this code is in the Thread.start method call. That will start a new Ruby thread to connect to the email server and perform the actual email delivery. The original thread can continue on it's merry way and return the HTML response back to the user. So the flow above would let steps 3 and 4 happen in parallel to step 5. This might not be a large performance improvement, due to how Ruby threads work, but it's an easy thing to setup and could shave seconds off of your response time.

If your looking for an easy performance tweak, or you've noticed that your email server is responding slowly this would be worth the 10 minutes to test out.

Technical note: This is a grossly simplified version of Ruby thread performance. There are a lot of factors that will determine how much faster (if at all) this will make Redmine, including if either thread becomes blocked while waiting on IO (e.g. network IO to the web server, network IO to the email server). At the very worst case, the performance will be almost as good as sending mail synchronously.

Rails 2.3.4 Support

Added by Eric Davis on September 23, 2009 in Home Code

Recently Redmine was upgraded to run on the latest version of Ruby on Rails, 2.3.4. Redmine has been running on older versions of Ruby on Rails, 2.2.2 in trunk and 2.1.2 in 0.8.x. This upgrade will also allow us to take advantage of new Ruby on Rails APIs and third party code. I was able to fix the major bugs during the upgrade but like any other major change, there will be a few small bugs that appear over the next few weeks.

If you are able to run Redmine in a test environment, please upgrade to the latest trunk and let us know about any bugs or odd behavior you find. If you can troubleshoot the bug and are able to provide a patch, that would be awesome.

With this upgrade complete, I'm going to focus my energy into building the REST API for Redmine. I'm hoping to build out the authentication part first so plugin developers will be able to add their own APIs. If you have an idea of what you'd like to use a Redmine API for, please comment on the API ideas forum thread I've posted.

Community Update #3

Added by edavis on July 17, 2009 in Code Community Home Plugins Themes

It's time for another update on what's been happening in the Redmine community. This installment covers from May 18th through July 12th.

Code Changes

Anonymous issue creation via email

Redmine's mail handler is a very powerful component, allowing users to send email to create new issues or update existing ones. r2789 added some additional options, including the ability to accept email from unknown users and automatically create accounts for them. This makes it easy to publish an email address for anyone to send new requests directly to Redmine.

Enhancement to about script

The about script, commonly called script/about, is used to let someone know what version of Redmine and Ruby on Rails you are running. #3387 enhanced the script to also include information about the installed Redmine plugins and their version. I know this will help me support my plugins by understanding what versions people encounter bugs on.

Administration panel breadcrumbs

A few sections of the Administration panel now has breadcrumb links to help navigate up a level. Personally, I'd like to redo the entire navigation of the Administration panel, but that will have to wait. r2810 added breadcrumbs for:

  • Custom Fields
  • Enumerations
  • Issue statuses
  • Roles
  • Trackers
  • Users

Fix for Bazaar merge tags

When branches are merged in Bazaar, a merge commit is performed. Redmine wasn't able to parse these merge commits which causing some commits to be missing from Redmine's database. Scott Aubrey supplied a patch for parsing the merge commits correctly, which was committed in r2780.

Enumerations storage change

r2777 included a major internal change to how Enumerations are stored. Enumerations include time entry activities, document categories, and issue priorities. To the user or administrator of Redmine, this change has no real impact. But plugin developers can take advantage of this change by being able to define their own custom Enumerations. If you are a plugin developer and need to store data that is similar to the existing Enumerations, I'd recommend you try to take advantage of this change.

Plugin hooks

A few plugin hooks were added for plugin developers.

  • :view_versions_show_contextual - r2771
  • :view_account_left_bottom - r2772
  • :view_account_right_bottom - r2772
  • :model_changeset_scan_commit_for_issue_ids_pre_issue_update - r2773
  • :controller_messages_new_after_save - r2774
  • :controller_messages_reply_after_save - r2774
  • :controller_wiki_edit_after_save - r2774
  • :controller_timelog_edit_before_save r2775

User Groups under development

I also noticed that Jean-Philippe Lang has started development on user groups in a separate groups branch. User groups is one of the major features scheduled for 0.9 and I know several organizations that are looking forward to this feature, especially the time savings it'll have. There's no time estimate when this will hit trunk but I suspect it will be over the next few weeks.

Community Events

There was a huge number of plugins developed over the past months. I'm so happy that the community is really innovating with plugins.

Campfire notification plugin

Edouard Brière created a Redmine plugin that will send issue notifications to a Campfire room. This would be useful to get real time notification of Redmine updates into your company chatroom. I wonder if someone will create one of these for IRC.

Code review plugin -

Haru Iida has released a new version of the Code Review plugin. This is a minor release that includes some bug fixes from the last release.

Developer Rates plugin

Shaun Gilroy has released a plugin called Developer Rates. From what I've heard, this plugin will let you attach an hourly rate to each time entry in Redmine. It's worth a look if you want to track any hourly costs in Redmine.

HoptoadServer plugin

Jan Schulz-Hofen has released the HoptoadServer plugin. Hoptoad is a service that will collect and manage errors from a Ruby on Rails application. The service provides a free plugin that you use to report to the Hoptoad servers. The HoptoadServer plugin allows Redmine to act as a Hoptoad server, replacing the need for the Hoptoad service. I'm already using this plugin with a few applications I'm hosting and I've been very happy getting all the errors sent directly to Redmine.

Hudson plugin

Toshiyuki Ando has released a plugin to integrate the Hudson continuous integration system into Redmine. The Hudson plugin has been under active development, with several releases in the past month. I don't run Hudson, but the integration this plugin provides is making me consider a switch to Hudson.

Issue import script

Joe Chin Hi Rene posted an example script that can be used to import issues from a CSV file into Redmine. If you're looking for a quick way to get a bunch of issues created, this script might be a good starting point. plugin

Ciaran Jessup has released a plugin for Redmine that will integrate Redmine notifications into, Twitter, or Once configured, this plugin will send notifications to the service making it easier to other people to follow what's happening in Redmine. This continues the recent trend of having Redmine send it's notifications out to external services.

Squeejee theme - 0.2.0

Mischa The Evil has uploaded a new version of the Squeejee theme for Redmine. This is a darker theme than the default Redmine theme and includes a wide variety of graphics. Mischa has done a terrific job of documenting which versions of Redmine, browsers, and plugins are compatible with it. If you're looking for a high quality theme with great support, I'd recommend trying anything Mischa packages.

Redmine Collapse plugin - 0.2.2

Mischa The Evil also released a few updates to his Redmine Collapse plugin. This plugin modifies the default layout of Redmine so the entire sidebar can be hidden away from view. This is useful if you work with a lot of data or need more monitor space. Once again, Mischa has some great documentation on it's compatibility on the plugin page.

Watersky theme

Konstantin Zaitsev has posted a new theme for Redmine, titled watersky. This is a nice blue theme for Redmine, using images instead of text links on the menus.

Wiki Extensions plugin

Haru Iida released another plugin which adds a few new wiki macros to Redmine, titled Wiki Extensions. If you're using the wiki in Redmine a lot, you will want to take a look at the demo page he put up to see if there's anything you could use.

If you hear about something in the Redmine community that you think is useful, please let me know about it and I'll try to spread the word.


Community Update #2

Added by edavis on May 19, 2009 in Code Community Home Plugins

This is the second installment of what's happening the Redmine community. This installment covers from March 28th through May 18th, which ended up being somewhere around 700 changes, messages, and updates. I've tried to highlight some of the major code changes and events in the community.

Code Changes

Redmine 0.8.4 released

Redmine 0.8.4 was released this past weekend. It's a bug fix release with a security update may affect people running Phusion Passenger. The list of bugs fixed in the release can be found on the changelog. Since this fixes a potential security issue (below), all users are recommend to upgrade or audit their Redmine install.

Weak autologin token generation algorithm causes duplicate tokens

The random sequence generator used by the autologin token wasn't being checked if it was creating unique values. This generator was replaced with the one from Ruby on Rails in ActiveSupport::SecureRandom and a database validation to improve security. Alexander Pavlov included a database query to see if you have been affected by the bug.

Add email notification on Wiki changes

Jean-Philippe Lang added an option to send email notification of wiki page creations and changes in r2749. It can be enabled in the Administration Panel under Email Notifications. The email notifications look good and include a link to view the diff of the wiki page on Redmine.

Create project for no administrator user

Jean-Philippe Lang changed how projects are created in Redmine so normal users can now be given permission to create projects. This is controlled by the "Create Project" permission so each site can turn it on or off for specific users. #1007

Users can have multiple roles

Jean-Philippe Lang committed yet another great feature to Redmine in Issue #706. Now a user will be able to have multiple Roles on a project, making it easier to control permissions and security. I'm going to start using this feature by separating out some common Roles like "Bookkeeper" and "Reports". Since this was a pretty major feature, there are going to be a few bugs to work out of the system as it's used. I'd recommend trying it out in a development environment for now and waiting a week or so for any major issues to be resolved.

script/about was failing on the production database

script/about is a Ruby script that will print out information about the current Redmine environment including library versions, database versions, and other debugging information. It looks like there was an error on a Ruby on Rails update so the script would only load the development environment. In r2733 the missing library was added so script/about should work for production instances again.

Community Events

Redmine Blog Plugin

Andrew Chaika just released Redmine Blog 0.0.3. This is a plugin that will give users the ability to write blog posts inside of Redmine. I think this could be very interesting on larger projects where teams want to store knowledge about the project inside of Redmine itself.

Redmine Code Review Plugin

Haru Iida released a Code Review plugin for Redmine. This will let a user add a code review on a particular piece of code in the code repository. I'm considering using this on my Open Source plugins so others can help to review and improve the code.

If you hear about something in the Redmine community that you think is useful, please let me know about it and I'll try to spread the word.


Copying a Project

Added by edavis on May 13, 2009 in Code Home

Recently the ability to copy a project was added to the latest Redmine. I thought it would be good to do a quick overview of how it the feature works along with a few screenshots of the process. Issue #1125 on has more details and discussion about the feature.

There are basically three short steps to copying a project.

Step 1. Select the project to use as the source of the copy

The source project will be the one where the data is copied from. Copying will copy the source project's:

  • Project settings - excluding the Project name and identifier
  • Project custom fields
  • Members of the project and their Roles
  • Issues - including issue assignments, time estimates, priorities, and statuses

There is also a plugin hook included so plugins can add data to copy easily. I've already modified the Redmine Budget plugin to copy Deliverables.

To select the project to copy, just click the "Copy" icon in the Projects panel, under Administration > Projects.

Step 2. Edit the project settings of the copied project

After starting the copy, you will be presented with a form for creating the setting of the copied project. This form is populated with the data from the source project but it can be changed before submitting. Once the settings have been setup, submit the form and move onto step 3.

Step 3. Check the copied project

At this point you will now have a new project based on information from the source project. As you can see in the screenshot above, there was 9 issues and 6 members copied. This would be a good time to review the copied data to make any changes that are needed. Both projects are completely separate, you don't need to worry about changing something in one project and having it affect the other.

That's all there is to this feature. It's scheduled to be released in the upcoming Redmine 0.9.0. If you have any suggestions for improving it or have found a bug in it, please open a new issue on


Community Update #1

Added by edavis on April 29, 2009 in Code Community Home Plugins

This is the first installment of regular updates of what's happening the Redmine community. I'm going to highlight the recent code changes and some important events by community members. This installment covers from March 20th through March 28th.

Code Changes

There was a lot of activity this past week with Jean-Philippe fixing a lot of bugs that have cropped up in trunk.

Email notifications of status changes on issues used the old status in the subject

In #3194, Chaoqun Zou noticed that if an issue's status was changed, the email notifications would use the old Status name in their subject line. This was fixed by a minor change to the emailing methods in r2673.

Deleting a parent wiki page will prompt about removing child pages.

Before r2676, when a parent wiki page was removed all of the child pages would be deleted also. This is could cause some data loss if the user isn't aware of it. Now, when a parent page is deleted, the user will be prompted with a few options for what to do with the child pages:

  • Move the child pages to the root of the wiki
  • Move the child pages under a different parent page
  • Delete the child pages.

Issue #3202 has some more details about this change.

Missing attachment

Missing attachment files will now return a HTTP 404 not found instead of the 500 error. I've seen this come up a couple of times. r2692

Issue Grouping

Issue Grouping

Jean-Philippe Lang committed a very nice feature to the Issues list in r2696, Issue grouping. Now the Issue List can be grouped by a specific column.

Community Events

Schedules plugin release

Brad Beattie just released a new version of the Schedules plugins. This version should be compatible with both Redmine 0.8.3 and trunk. I've been using Schedules everyday since it was first released to help plan out my day.

Local avatar plugin released

Andrew Chaika has been busy developing a few plugins for Redmine. He has an Local Avatars plugin that will let administrators use local versions of user avatars instead of the Gravatar service. Like he said, this would be useful for corporate emails that can't use Gravatar.

Vote plugin released

Not to be content with only one release, Andrew Chaika also released the first version of the Issue Vote plugin. This plugin will allow users to vote on issues. This would be extremely useful for public or Open Source projects to discover user interest. I'm going to be looking at adding it to my Redmine soon.

Rate and Budget plugins released

I've also released the first version of the Redmine Rate plugin and an update to the Budget plugin. I personally think they are great plugins, but I'm little biased.

Synchronizing Two Git Repositories

Farzad FARID recently wrote up a great tutorial for synchronizing two git repositories with Redmine. In his example, he configured his Redmine git repository to sync up with a GitHub one.

If you hear about something in the Redmine community that you think is useful, please let me know about it and I'll try to spread the word.


Setup Redmine to send email using GMail

Added by edavis on April 20, 2009 in Code Home

There's been quite a discussion about setting up Redmine to use GMail's SMTP server for sending emails. I've seen this being a pain point for a lot of people so I've decided to write up a set of directions on how to get your Redmine setup to use GMail's SMTP. I've tested this process with Redmine 0.8.3, 0.8-stable, and trunk (r2670) using my personal GMail account.

1. Install the action_mailer_optional_tls plugin

The action_mailer_optional_tls_plugin adds a TLS option to Redmine's emailing library, ActionMailer. TLS is a version of SSL which is required by GMail in order to send email.

To install this plugin, use the script/plugin command in your Redmine directory:

ruby script/plugin install git://

2. Configure your email.yml

Redmine uses email.yml to store all the configuration for the email servers. This is used instead of config/environment.rb to setup a connection to a SMTP server. Each Redmine environment (development, test, production) can have it's own configuration section. If you are configuring Redmine to be used on a production server, I'd recommend just configuring the production mode like below:

# File: config/email.yml
  delivery_method: :smtp
    tls: true
    address: ""
    port: '587'
    domain: ""
    authentication: :plain
    user_name: ""
    password: "your_password"

A complete file that uses GMail for development and production would look like:

# File: config/email.yml
  delivery_method: :smtp
    tls: true
    address: ""
    port: '587'
    domain: ""
    authentication: :plain
    user_name: ""
    password: "your_password"

  delivery_method: :smtp
    tls: true
    address: ""
    port: '587'
    domain: ""
    authentication: :plain
    user_name: ""
    password: "your_password"

  delivery_method: :test

One important thing to watch, is that this file only uses spaces. If there are tabs anywhere it in, Redmine will not be able to read the file correctly and you will not be able to connect to GMail.

3. Start up Redmine and test your Email

Next it's time to start up Redmine and to send a test email. Make sure that you start Redmine in the same mode as you configured above (e.g. production). To send a test email:

  1. Login as an administrator
  2. Go to the Administration panel
  3. Go into the Settings and select the "Email notifications" tab
  4. In the bottom right, click the link to "Send a test email"

This should cause Redmine to send a email using GMail's SMTP. Below you can see a log of the connection from my log/production.log:

Processing SettingsController#index (for at 2009-04-13 16:24:50) [GET]
  Parameters: {"action"=>"index", "controller"=>"settings"}
Rendering template within layouts/base
Rendering settings/edit
Completed in 1029ms (View: 840, DB: 9) | 200 OK [http://localhost/settings]
-> "220 ESMTP 28sm495064wfd.5\r\n"
<- "EHLO\r\n"
-> " at your service, []\r\n"
-> "250-SIZE 35651584\r\n"
-> "250-8BITMIME\r\n"
-> "250-STARTTLS\r\n"
-> "250 PIPELINING\r\n"
<- "STARTTLS\r\n"
-> "220 2.0.0 Ready to start TLS\r\n"
<- "EHLO\r\n"
-> " at your service, []\r\n"
-> "250-SIZE 35651584\r\n"
-> "250-8BITMIME\r\n"
-> "250-AUTH LOGIN PLAIN\r\n"
-> "250 PIPELINING\r\n"
<- "AUTH PLAIN ---------------\r\n"
-> "235 2.7.0 Accepted\r\n"
<- "MAIL FROM:\r\n"
-> "250 2.1.0 OK 28sm495064wfd.5\r\n"
<- "RCPT TO:\r\n"

Processing AdminController#test_email (for at 2009-04-13 16:25:11) [GET]
  Parameters: {"action"=>"test_email", "controller"=>"admin"}
Sent mail to 
-> "250 2.1.5 OK 28sm495064wfd.5\r\n"
<- "DATA\r\n"
-> "354  Go ahead 28sm495064wfd.5\r\n"
writing message from String
wrote 2605 bytes
-> "250 2.0.0 OK 1239665113 28sm495064wfd.5\r\n"
<- "QUIT\r\n"
-> "221 2.0.0 closing connection 28sm495064wfd.5\r\n"
Redirected to controllersettingstabnotificationsactionedit
Completed in 2293ms (DB: 4) | 302 Found [http://localhost/admin/test_email]

If you're curious about what the connection is saying, any -> is GMail talking to Redmine and any <- is Redmine talking to Gmail. The important thing to see is where GMail responds with a 250 status code near the end of the connection. This means that the connection was successful and that the email will be delivered. About a minute later, I saw the test email in my inbox from GMail.


If you follow this set of directions, you can easily setup GMail with Redmine. If this was helpful, please let me know in the comments or suggest a new article.