Transferring content within Umbraco via Conveyor
The following is one of a series of posts introducing various open-source projects Zone have developed and made available for others to use. Some come from personal side-projects and others where we’ve been able to identify general solutions to specific problems we’ve worked on for our clients — who we thank for allowing their contribution to these projects to be released in this manner. In this article Ali Taheri and Andy Butland describe Conveyor, an Umbraco package that provides functionality allowing content editors to transfer the content they have created between environments.
The development of Conveyor came about from particular requirements we had for content approval on the Eat Happy Project website designed and built for Tesco. As new content was produced by our editorial team, before it could be published to the live website a number of stakeholders had to review it and sign it off. Although Umbraco supports previewing unpublished content, using this wasn’t really appropriate as it would have meant all approvers needing to be users of the CMS. It’s also not easy in that scenario to review a whole suite of changes in go.
Instead we would have the editorial team create the content in a pre-production environment that closely mirrored the live one. Once signed off, the content would be re-entered into the live site CMS. Clearly this was an onerous task and one that, relying on human input, could lead to errors and inconsistencies.
We also had other use cases — in particular when developers are working on a new feature, it can be useful to restore the latest content into their development environments to ensure the new features they are building are compatible with the website content. However it wouldn’t always be appropriate simply to restore the whole Umbraco database, particularly if personal membership information from site visitors is contained within it.
Developers Ali Taheri and Robin Herd took up the challenge of developing an automated procedure for this content promotion and transfer task, in part in their time at Zone but also with a number of evenings involved too.
Once installed, essentially the package allows you to create an archive file based on the chosen content which can then be imported into another environment. Conveyor is sophisticated enough to review the page selected and determine which other content and media needs to be transferred along with it. These might be associated pages, selected media or images or entered directly into a rich text editor.
The package deliberately doesn’t try to bite off too much though. Courier is Umbraco’s own package that supports similar requirements and attempts to handle or developer related assets (templates, document types etc.) as well. This is a really hard problem to solve without running into problematic edge cases, so for us the “content only” approach felt the best way forward.
Conveyor supports all the built-in data types, several third party ones and provides an extensibility mechanism for any others that might be used in a particular project. It can be used with both Umbraco 6 and 7, including allowing the transfer of content between the two versions.
Finally in particular for this project we’d like to thank our client at Tesco for allowing Zone to make this package available to the wider Umbraco community. Although built for the particular use case we had on this project it was clear from the outset that we were solving a general purpose problem that many others will be facing too.
The project is open-source at GitHub. To use it, you can download it from our.umbraco.org.