ChiliProject to Redmine migration howto and resources by Christian Daehn (c) ASinteg GmbH.
Source system:
- Ruby 1.8.7 + Rails 3.2.16
- ChiliProject 3.9.0
- MySQL DB
- Apache2 with Passenger
- Debian 7 Wheezy
Destination System:
- Ruby 1.8.7 + Rails 3.2.16
- Redmine 2.4.1
- MySQL DB
- Apache2 with Passenger
- Debian 7 Wheezy
To migrate from ChiliProject 3.x back to Redmine 2.1 we used the guide provided by: http://code.google.com/p/chili-to-redmine/
But we faced with several problems which can be solved with this howto and resources provided here.
Update: There's a new Ruby script, which seems to do the same sql database migration task as the Java tool chili-to-redmine: https://gist.github.com/pille/603702cbb8422cc4244c
After the database migration the following problems occurred:
- old/obsolete paths containing
/chiliproject/
- viewing issue details caused internal server errors (template parsing errors)
- plugins broke (ChiliProject uses Rails 2.x, but Redmine 2.1 Rails 3.x)
- themes broke (CSS ids changed and CP menu structure is incompatible to Redmine)
Further: The wiki history couldn't be migrated the Java tool - so all wiki histories are gone.
For this guide the following file system structure is assumed:
/var/chiliproject/
/var/redmine/
/var/www/chiliproject/
-> link to /var/chiliproject/public/
/var/www/redmine/
-> link to /var/redmine/public/
The Apache2 with mod passenger runs as user www-data
and has DocumentRoot /var/www/
.
To run the Java based ChiliToRedmine database migration tool, the openjdk-6-jre is needed under Debian - for other OS any Java JRE of version 6 or higher is needed.
We strictly followed the Chili-to-Redmine guide and used Redmine 2.1.0 and after the migration updated to Redmine 2.4.1 - which worked without erros.
But Redmine 2.1 has some issues with the mysql
backend - because in Rails 3.x this backend is mysql2
. So if you use Redmine 2.4, there all database and Gemfile entries already use mysql2
as database backend and you don't have to struggle with manually editing database.yml and the Gemfile.
But: We can't give any guarantee that it works - but it should do (in theory) ;-)
-
Stop the Apache2 server
-
Install Redmine 2.1.0 (or higher),
for this guide we use the svn checkout to/var/redmine-2.4/
and made a symlink to/var/redmine/
and created the databaseredmine
inside MySQL -
(for Redmine 2.1 only) Edit the Redmine Gemfile
/var/redmine/Gemfile
and change the section with:mysql
to:mysql2
, because onlymysql2
runs flawlessly with Rails 3.x -
otherwise you'll get errors duringrake db:migrate
etc. -
Edit the Redmine config
/var/redmine/config/database.yml
and change the databade backend frommysql
tomysql2
(same reasons/problems as mentioned in step 3) and create a copy nameddatabase-migration.yml
where the database backend still ismysql
(needed for the Java migration tool) -
Finish Redmine installation, change the Apache2/passenger config from
/var/chiliproject/
to/var/redmine/
etc. so now Apache2 runs Redmine instead of ChiliProject -
Start Apache2 and test the basic Redmine install, then stop Apache2 again
-
Backup the ChiliProject database and create a sqldump:
mysqldump -u root -p chiliproject >/tmp/dbdump_chiliproject.sql
-
We had some issue descriptions containing some examples for UTF codes which broke the migration:
\xXX
- so we had to replace these invalid UTF codes e.g. byXXX (UTF-8 Hex)
in all entried of tablejournals
with:
perl -i -pe 's/\XXX (UTF-8 Hex)/XXX (UTF-8 Hex)/g' dump.sql
-
Replace all
/chiliproject/
urls to/redmine/
inside the database dump with:
perl -i -pe 's/\/chiliproject\//\/redmine\//g' /tmp/dbdump_chiliproject.sql
-
Ensure that your Redmine installation still works and has default data loaded (see Redmine install howtos)
-
Import the
/tmp/dbdump_chiliproject.sql
into the redmine database, e.g. by executing these commands inside MySQL:
USE redmine; SOURCE /tmp/dbdump_chiliproject.sql
and run the Redmine database migration:
rake db:migrate RAILS_ENV=production
-
Run the SQL commands described in the Chili-to-Redmine guide:
ALTER TABLE wiki_contents ADD comments VARCHAR(250) NULL, CHANGE COLUMN lock_version version INTEGER(11); ALTER TABLE journals CHANGE COLUMN journaled_id journalized_id INTEGER(11), CHANGE COLUMN activity_type journalized_type VARCHAR(255), CHANGE COLUMN created_at created_on DATETIME; UPDATE journals SET journalized_type='Issue' WHERE journalized_type='issues'; ALTER TABLE journals CHANGE COLUMN changes changes_chili TEXT NULL, DROP COLUMN type, DROP COLUMN version; ALTER TABLE trackers ADD COLUMN fields_bits INT(11) NULL DEFAULT '0'; ALTER TABLE repositories ADD COLUMN identifier VARCHAR(255) NULL DEFAULT NULL, ADD COLUMN is_default TINYINT(1) NULL DEFAULT '0'; ALTER TABLE workflows ADD COLUMN field_name VARCHAR(30) NULL DEFAULT NULL, ADD COLUMN type VARCHAR(30) NULL DEFAULT NULL, ADD COLUMN rule VARCHAR(30) NULL DEFAULT NULL; ALTER TABLE auth_sources CHANGE COLUMN custom_filter filter VARCHAR(255) NULL DEFAULT NULL, ADD COLUMN `timeout` INT(11) NULL DEFAULT NULL;
-
Change into
/var/redmine
dir and execute the Java database migration tool ChiliToRedmine:
java -jar ChiliToRedmine.jar config/database-migration.yml
-
Fix conversion issues of the migration tool by running the sql command:
UPDATE journal_details SET value='' WHERE value='(undefined)';
-
Delete the new table
changes_parents
by:
DROP TABLE changes_parents;
otherwise you'll get errors running the database migration -
Fix bad date anchor fields from Chili not supported in Redmine:
UPDATE redmine_dev.journal_details SET value=null WHERE (prop_key = 'due_date' OR prop_key = 'start_date') AND (value = '*id001' OR value = '(unknown)'); UPDATE redmine_dev.journal_details SET value=replace(value, '&id001 ', '') WHERE (prop_key = 'due_date' OR prop_key = 'start_date') AND value like '&id001 %';
-
Change owner of
/var/redmine/
towww-data
-
Start Apache2 and test Redmine
Due to the fact that ChiliProject still uses Rails 2.x usually all plugins won't work in Redmine - you have to download/install newer versions of them or port them to Rails 3.x.
For Redmine 2.x all plugins now reside in /var/redmine/plugins/
and not any more in ../vendor/plugins/
like in ChiliProject.
Christian Daehn (c) ASinteg GmbH, Schwerin (Germany) 2014
You are free to modify & distribute this document under the MIT license.