Puncte:1

Cum să migrați fișiere din afara Drupal, cu fișiere deja acolo unde trebuie să fie, creând entități de fișiere

drapel pe

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:

  1. Migrați fișierele în entități de fișier
  2. 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
  3. 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.

Puncte:1
drapel cn

Starea temporară este un câmp din entitatea fișier (stare), îl puteți seta la 1 în timpul importului pentru a-l face permanent.

proces:
  uid:
    plugin: default_value
    valoare_default: 179
  uri: cale
  stare: 
    plugin: default_value
    valoare_default: 1

Utilizarea fișierelor este un lucru separat (relativ) și nu ar trebui să intre în joc aici. Acele referințe vor fi adăugate atunci când asociați fișierele cu conținut etc.

drapel pe
Mulțumiri.Știți dacă utilizarea afectează capacitatea de a deschide un fișier dintr-un link din lista de fișiere? Probabil că voi continua cu testul grupului de migrare fișiere+media, așa că voi vedea care este impactul asupra 403-urilor mele. Cel mai curios chiar acum dacă lipsa oricăror entități asociate ar explica de ce toate fișierele 403... sau dacă probabil am o altă problemă.
drapel cn
Într-un caz foarte specific, pe care se pare că ați putea declanșa, da - dacă fișierul este temporar, nu are utilizare și proprietarul fișierului nu este utilizatorul actual, atunci accesul este refuzat.
drapel pe
Pot confirma că acesta este motivul pentru care mi se interzice accesul la acestea. Conectați-vă ca UID 179 și fișierele pot fi deschise. Multumesc pentru ajutor!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.