Ein Migrationsbericht  - Die Inhalte einer Webseite dürfen bei einem Wechsel auf einen anderes CMS nicht einfach verloren ...
Ausgangssituation 1 <ul><li>Ausgangssituation 1 </li></ul><ul><li>Kunde mit erhöhtem Sicherheitsbedürfnis...
mit Typo3 Installation...
und schlechten Erfahrungen! </li></ul><ul></ul>
Ausgangssituation 2 <ul><li>Ausgangssituation 2 </li></ul><ul><li>Stabilitäts-/Performance-Probleme: Virtualisierung + hoh...
Ungewöhnlich große Datenbank
Altlasten: keine sprechenden URLs, Index-Probleme </li></ul><ul></ul>
Ausgangssituation 3 <ul><li>Ausgangssituation 3 </li></ul><ul><li>Website ist Kommunikations-Platform: Abbildung einer bun...
Mehr als 2000 Website-Benutzer (Frontend) in Typo3, ca. 100 Redakteure (Typo3-Backend-Benutzer)
Ausreichend Inhalte für eine automatisierte Migration: Seiten, tt_news, tt_cal,... </li></ul>
Der Wunsch: Ersatz des CMS durch Plone <ul><li>Der Wunsch: Ersatz des CMS durch Plone </li></ul><ul><li>Inkl. Migration al...
Konsolidierte Benutzerprofile
Schulung der Redakteure über verbandseigene Multiplikatoren  </li></ul>
Anforderungen an Plone <ul><li>Anforderungen an Plone </li></ul><ul><li>Vollständige IE6 Kompatibilität
Moderierbare Kommentare: plone.app.discussion
Fotoalben, RSS-Feed-Integration, Videos, Veranstaltungskalender, Youtube-Integration,...
Nachbildung des bisherigen Registrierungsworkflows
Konsolidierte Benutzerquelle: LDAP (für OpenExchange)  </li></ul>
Keine Herausforderung! Aber wie migrieren? <ul><li>Keine Herausforderung! Aber wie migrieren? </li></ul><ul><li>Das  n-te ...
Upcoming SlideShare
Loading in …5
×

Von Typo3 zu Plone - Ein Migrationsbericht

318 views
284 views

Published on

Die Inhalte einer Webseite dürfen bei einem Wechsel auf einen anderes CMS nicht einfach verloren gehen. Da jedes CMS seine Daten etwas anders speichert ist Daten-Migration aber eine oft komplexe und aufwändige Aufgabe. Der Vortrag berichtet von einer konkreten Migration von Typo3 zu Plone, bei der Inhalte mittels Transmogrifier automatisch transferiert und angepasst wurden.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
318
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Von Typo3 zu Plone - Ein Migrationsbericht

  1. 1. Ein Migrationsbericht - Die Inhalte einer Webseite dürfen bei einem Wechsel auf einen anderes CMS nicht einfach verloren gehen. Da jedes CMS seine Daten etwas anders speichert ist Daten-Migration aber eine oft komplexe und aufwändige Aufgabe. Der Vortrag berichtet von einer konkreten Migration von Typo3 zu Plone, bei der Inhalte mittels Transmogrifier automatisch transferiert und angepasst wurden. Andreas Schiweck, catWorkX GmbH <ul>Von Typo3 zu Plone </ul>
  2. 2. Ausgangssituation 1 <ul><li>Ausgangssituation 1 </li></ul><ul><li>Kunde mit erhöhtem Sicherheitsbedürfnis...
  3. 3. mit Typo3 Installation...
  4. 4. und schlechten Erfahrungen! </li></ul><ul></ul>
  5. 5. Ausgangssituation 2 <ul><li>Ausgangssituation 2 </li></ul><ul><li>Stabilitäts-/Performance-Probleme: Virtualisierung + hohe IO Last
  6. 6. Ungewöhnlich große Datenbank
  7. 7. Altlasten: keine sprechenden URLs, Index-Probleme </li></ul><ul></ul>
  8. 8. Ausgangssituation 3 <ul><li>Ausgangssituation 3 </li></ul><ul><li>Website ist Kommunikations-Platform: Abbildung einer bundesweiten Verbandstruktur mit Landes- und Bezirksverbänden
  9. 9. Mehr als 2000 Website-Benutzer (Frontend) in Typo3, ca. 100 Redakteure (Typo3-Backend-Benutzer)
  10. 10. Ausreichend Inhalte für eine automatisierte Migration: Seiten, tt_news, tt_cal,... </li></ul>
  11. 11. Der Wunsch: Ersatz des CMS durch Plone <ul><li>Der Wunsch: Ersatz des CMS durch Plone </li></ul><ul><li>Inkl. Migration aller Inhalte
  12. 12. Konsolidierte Benutzerprofile
  13. 13. Schulung der Redakteure über verbandseigene Multiplikatoren </li></ul>
  14. 14. Anforderungen an Plone <ul><li>Anforderungen an Plone </li></ul><ul><li>Vollständige IE6 Kompatibilität
  15. 15. Moderierbare Kommentare: plone.app.discussion
  16. 16. Fotoalben, RSS-Feed-Integration, Videos, Veranstaltungskalender, Youtube-Integration,...
  17. 17. Nachbildung des bisherigen Registrierungsworkflows
  18. 18. Konsolidierte Benutzerquelle: LDAP (für OpenExchange) </li></ul>
  19. 19. Keine Herausforderung! Aber wie migrieren? <ul><li>Keine Herausforderung! Aber wie migrieren? </li></ul><ul><li>Das n-te Skript, Webcrawling, BeautifulSoup,... Nein!
  20. 20. Lennart Regebro versprach kurz zuvor in Budapest: „Migrating to Plone with less Pain“: mit Transmogrifier.
  21. 21. „ Wer nicht wagt...“: das versuchen wir mal! </li></ul>
  22. 22. Kurze Zeit später wissen wir <ul><li>Kurze Zeit später wissen wir: </li></ul><ul><li>Transmogrifier bietet eine konfigurierbare Pipeline für Transformationen an.
  23. 23. Es gibt schon eine große Anzahl an Transmogrifiern, die viele nötige Aufgaben übernehmen können: urlnormalizer, pageupdater, constructor, uidupdater, atschemaupdater, workflowupdater, reindexobject, savepoint </li></ul>
  24. 24. Energize Transmogrifier, Mr. Crusher! <ul><li>Energize Transmogrifier, Mr. Crusher! </li></ul>
  25. 25. Transmogrifier?
  26. 26. customer.import customer.import customer.import/customer/import/pipeline0.cfg: [transmogrifier] pipeline = section0 section1 savepoint [section0] blueprint = some.blueprint [section1] blueprint = some.blueprint [savepoint] blueprint = collective.transmogrifier.sections.savepoint every = 50 customer.import/customer/import/configure.zcml: <configure [...] xmlns:transmogrifier = &quot; http://namespaces.plone.org/transmogrifier&quot; […] <transmogrifier:registerConfig name =“customer .import.pipeline0&quot; title = &quot;customer.import.pipeline0&quot; description = &quot;pipeline0&quot; configuration = &quot;pipeline0.cfg&quot; /> </configure> customer.import/customer/import/setuphandler.py: from collective . transmogrifier . transmogrifier import Transmogrifier def setupVarious ( context ): &quot;&quot;&quot; &quot;&quot;&quot; transmogrifier = Transmogrifier ( context . getSite ()) # run the following pipelines transmogrifier ( &quot;customer.import.pipeline0&quot; )
  27. 27. Typo3: Was brauchen wir jetzt noch? <ul><li>Typo3: Was brauchen wir jetzt noch? </li></ul><ul><li>Sources: TTNewsSource, PageSource, CalSource, StructureSource
  28. 28. Constructors: TTNews2NewsItem, Page2Folder, Page2Document, Cal2Event
  29. 29. Fixes: FixEncodings, FixLinks
  30. 30. Integrators: SetRelatedItems, AttachCategories, AttachDiscussions, DiscussionsUpdater, AttachImage </li></ul>
  31. 31. Blueprint? <ul><li>Blueprint?
  32. 32. Generator + ISection + Dictionary „item“! </li></ul><ul><li>>>> type(item)
  33. 33. <type 'dict'>
  34. 34. >>> item['title'] = &quot;Lorem Ipsum&quot;
  35. 35. >>> item['_path'] = &quot;/foo/bar&quot; </li></ul>from collective . transmogrifier . interfaces import ISection from collective . transmogrifier . interfaces import IsectionBlueprint class Blueprint0 ( object ): &quot;&quot;&quot; &quot;&quot;&quot; classProvides ( ISectionBlueprint ) implements ( ISection ) def __init__ ( self , transmogrifier , name , options , previous ): &quot;&quot;&quot; &quot;&quot;&quot; self . previous = previous self . context = transmogrifier . context def __iter__ ( self ): &quot;&quot;&quot; &quot;&quot;&quot; for item in self . previous : # Do whatever you like to item item [ 'Creator' ] = 'Bob' yield item
  36. 36. Use the TTNewsSource, Luke! <ul><li>Use the TTNewsSource, Luke! </li></ul>import MySQLdb query = &quot;&quot;&quot;select uid, pid, title, short, bodytext, author, links, image, endtime, type, page, ext_url, news_files as attachments, crdate as creation_date, datetime as modification_date from tt_news where deleted = 0 and archivedate = 0&quot;&quot;&quot; q1 = &quot;select uid, pid, title, sorting from pages where uid = %s order by sorting&quot; self . query = &quot;&quot;&quot;select * from pages where deleted = 0&quot;&quot;&quot; + limit query = &quot;&quot;&quot;select header, image, imagewidth from tt_content where uid = %s&quot;&quot;&quot; query = &quot;&quot;&quot;select header, header_layout, media, imagecaption from tt_content where uid = %s&quot;&quot;&quot; <ul><li>Reverse Engeneering, Versuch, Irtum, Änderung, Re-Import! </li></ul>
  37. 37. Wofür StructureSource? <ul><li>Wofür StructureSource?
  38. 38. Typo3 </li></ul><ul><li>Plone </li></ul>
  39. 39. Flexibilität für den Kunden <ul><li>Flexibilität für den Kunden: </li></ul><ul><li>Objekte verschieben (item['_path'])
  40. 40. Modifikationen des Titels
  41. 41. Kodierungsprobleme
  42. 42. Doch keine Keyword-Migration
  43. 43. ... </li></ul>
  44. 44. Die (Ab-)Rechnung bitte! <ul><li>Die (Ab-)Rechnung bitte! </li></ul><ul><li>4 Pipelines: structure, pages, news, events
  45. 45. Je Pipeline: 10-15 Sections
  46. 46. 15 generische Typo3-Blueprints, 4 kundenspezifische Updates
  47. 47. Gefühlte 15 Mio. unkritische Re-Imports nach Anpassungen </li></ul>
  48. 48. Unser Fazit <ul><li>Unser Fazit </li></ul><ul><li>Transmogrifier can do the job!
  49. 49. Migrationen mit Transmogrifiern sind flexibel, wiederverwendbar und zu warten!
  50. 50. Aber: Aufwand beim ersten Einsatz nicht zu unterschätzen! </li></ul>
  51. 51. Danke! <ul><li>Danke!
  52. 52. email: andreas.schiweck (at) catworkx.de
  53. 53. Twitter: @_rainrider
  54. 54. IRC: rainrider </li></ul>

×