Project

General

Profile

Understanding Redmine's filesystem

Added by Benjamin FRAUD about 14 years ago

Good afternoon everybody.

I apologize if my question sounds a bit stupid, since I just entered Redmine's development world. Just so you know, the project I am working on aims at adapting Redmine for some specific needs by deleting some functionnalities and adding a few. Along with that, I was asked to keep the possibility to update Redmine with releases to come, which I assume will be the main difficulty, since I apparently have to go inside the core. Anyway...

Before I get started with development stuff, I need of course to understand how Redmine is structured, in terms of filesystem and dependencies. So far, I installed a 0.9.3 release on a Fedora server, and it works fine. So here is my question : could somebody give me a hint (or a link for that matters), of how is structured Redmine? That is to say : what is the purpose of each directory (such as lib/, app/, vendor/...), and how are they connected?

To be honnest, I went through the plug-in creation tutorial, but it is a bit complicated to understand the way it works. I mean, I assumed a plug-in would be a combination of several ruby files, editable through Eclipse for example, but I was told to use ruby generation routines and scripts. Could somebody light the way?

Thank you for your time.

Have a nice one.


Replies (4)

RE: Understanding Redmine's filesystem - Added by Felix Schäfer about 14 years ago

Learn Rails. Really. Explaining such basic things would only repeat what's in the various guides. First stop: the ruby on rails guides http://guides.rubyonrails.org/.

RE: Understanding Redmine's filesystem - Added by Benjamin FRAUD about 14 years ago

Alright, thank you for that. I didn't know that Redmine folders followed a specific Rails architecture, except for the MVC part which I'm already familiar with. The link you gave me seems really useful, so thank you.

However, based on this architecture, I'd like to raise a problem you guys probably have already faced. As I said above, my job is to adapt Redmine to some specific applications, which means getting rid of some functionnalities. As far as I know, that implies getting into the core right? The thing is I was explicitely told to make this custom Redmine app compatible with future releases (so the tool is not static). How can I do that in term of software architecture ? I assume that installing a new version of Redmine would make a mess in the current installation.

RE: Understanding Redmine's filesystem - Added by Felix Schäfer about 14 years ago

I think the "easiest" would be to just throw a custom View layer over it, maybe with some tweaks to the routes so that certain actions aren't even "browseable". You could do all that in a plugin, i.e. views in your plugin will override core views, and you could "extend" some classes (I'd say controller preferably) to throw in some defaults in a chained call. That on the other hand will also mean your plugin will only be compatible with a specific redmine version because you won't automagically get the view changes merged into your views, but I'd say it shouldn't be too much of a hassle to make it compatible for a whole minor tree.

RE: Understanding Redmine's filesystem - Added by Benjamin FRAUD about 14 years ago

Yeah that's what I thought. The thing is I just can't forsee what modifications will be brought to new releases, so the best thing to do would be to add a view layer. Alright, thank you for your time Felix. Have a nice day.

    (1-4/4)