Fac o migrare de pe un site non-Drupal - până acum, în scopuri de testare.
Am toate datele în fișiere CSV.
Deoarece sunt nou-nouț în migrarea către Drupal 9 din afara Drupal, învăț acest lucru în faze mici, oarecum simple.
Datele sursă includ o mulțime de înregistrări, dintre care multe au fișiere atașate.
Unele fișiere sunt atașate la mai multe înregistrări.
Unele înregistrări au mai multe fișiere atașate.
„Atașat” aici înseamnă că este stocată o adresă URL, împreună cu câteva metadate, cum ar fi o scurtă descriere și un tip. În baza de date, aceasta într-un tabel de unire pentru a lega fișierele cu înregistrările.
Ce vreau să obțin în cele din urmă în Drupal:
Toate aceste înregistrări au migrat ca noduri, fișierele s-au alăturat media și cele s-au unit la nodurile corecte prin referință la entitate. Entitățile media create ar trebui să aibă meta chestii vechi (descriere, tip) în câmpuri personalizate.
Am înțeles că modul în care ar trebui să se facă acest lucru este:
- Migrați fișierele în entități de fișier
- Folosind un grup de migrare (module migration_plus, migrate_tools și migrate_source_csv) utilizați aceeași sursă de date și migration_lookup pentru a migra entitățile media
- Migrați nodurile și utilizați pluginul de proces entity_generate și value_key de ID-ul țintă sau ceva pentru a lega nodurile la entitățile media potrivite.
Fișierele sunt deja acolo unde trebuie să fie pe server, iar căile/URI-urile sunt stocate într-un fișier csv împreună cu descrierea și tipul, un câmp ID unic și ID-ul fiecărei înregistrări aferente.
Ca punct de plecare, am încercat să import 30 de fișiere ca import independent. Modulul migrate_files nu mi s-a părut potrivit, mai ales pentru că nu îmi pot da seama cum să-l adaptez la o situație în care entitățile media vor extrage datele câmpului dintr-un csv... iar fișierele uri sunt stocate în un csv de asemenea.
Așa că m-am gândit să-l încerc în cea mai mare parte standard.
Acesta a fost yaml-ul meu:
uuid: 1bcec3e7-0a49-4473-87a2-6dca09b91abjan-test1
id: fileimptest
etichetă: import fișier de testare
migration_group: implicit
sursă:
plugin: „csv”
cale: „/srv/imports/filetest1.tab”
delimitator: „\t”
incintă: '"'
header_offset: nul
ID-uri: [ajutor]
# nefolosind majoritatea acestor câmpuri în importul fișierului
# dar inclusiv pentru că poate fi necesar pentru grupare
# și migrate_lookup în importul media?
câmpuri:
0:
nume: ajutor
etichetă: „Id unic”
1:
nume: titlu
etichetă: „descriere”
2:
nume: formflag
etichetă: „FormYN”
3:
nume: noua cale
etichetă: „cale”
4:
nume: docnum
etichetă: „număr document”
5:
nume: doctype
etichetă: „tip document”
proces:
uid:
plugin: default_value
valoare_default: 179
uri: cale
destinaţie:
plugin: entity:file
Rezultatul a fost că cele 30 de fișiere de testare ale mele au apărut în lista de fișiere sub admin/conent cu statutul temporar. Legăturile par corecte, dar dacă faceți clic pe ele, accesul 403 este refuzat (permisiunile folderelor sunt 777 și sunt deținute de serverul web).(Folosesc un sistem de fișiere privat și am mai multe fișiere încărcate prin widget-uri de câmp obișnuit: această listă cu starea „permanentă”. Linkurile arată la fel, în afară de subdirectoare, dar se deschid normal când se da clic.)
Deci intrebarile sunt:
- Ce greșesc până acum?
- Există o cale mai bună? (Sunt destul de sigur că există, dar ce?)
(Detaliu: uid 179 este doar un utilizator pe care l-am creat numit „importator”)
Trebuie să remarc că am citit acest și acest, și o mulțime de exemple în modulele aferente. Ei, împreună, au informat despre ce am venit până acum, în măsura în care îi înțeleg.)
Editare: „starea temporară” înseamnă doar că nu există încă utilizări, deci nu este importantă în acest moment.
Singurul lucru care pare greșit cu acest import de testare este problema accesului refuzat. Din procesul de migrare lipsește ceva necesar pentru funcționarea completă a sistemului de fișiere privat?
Poate că atunci când utilizați fișiere private, acestea pot fi vizualizate doar dacă sunt „utilizate” pe o altă entitate? Nu am găsit încă informații despre asta sau nu am găsit o modalitate de a-l testa încă.
Edit2: după comentarii și răspuns de mai jos, starea „temporană” poate fi setată programatic în timpul importului, iar accesul refuzat este normal în aceste condiții: când fișierul importat este atât a) nefolosit nicăieri, cât și b) făcut clic de către un alt utilizator decât uid-ul fișierului.