it-swarm.dev

File di migrazione: generazione di script di migrazione sql post-aggiornamento

Sto cercando un modo organizzato per eseguire localmente gli aggiornamenti di joomla e quindi aggiornare i sistemi di produzione mediante la distribuzione del codice + migrazioni db, in modo da non dover aggiornare joomla sulla produzione o disabilitare il sito durante l'esecuzione degli aggiornamenti. Il componente di aggiornamento corrente utilizza una funzione specifica per eseguire gli aggiornamenti sql

https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_joomlaupdate/models/default.php#L515

In finaliseUpgrade sembra che stia recuperando/analizzando alcune query e applicandole allo schema. Se lo capisco correttamente, scorre gli script/i segnaposti in com_admin/sql/{DBType}/*. Sql rilevando tutte le nuove versioni dei file sql che deve essere eseguito sul db.

Il problema con questi script è che non vedo come posso usarli come strumento di migrazione per il mio database di produzione in quanto sono prefissati nella tabella e inoltre preferirei avere un singolo script di migrazione consolidato.

Potresti suggerire se joomla scrive effettivamente le modifiche apportate da qualche parte in un file di migrazione?

Il file logs/joomla_update.php contiene alcune tracce delle modifiche ma queste vengono troncate poiché apparentemente registra solo pochi caratteri

Ogni suggerimento è molto apprezzato.

3
Bizmate

Due scenari:

Sviluppo, Staging-Authoring, Produzione

La produzione è di sola lettura, la gestione temporanea è il luogo in cui viene preparato il contenuto e vengono eseguiti i test. Joomla viene sempre aggiornato su Staging, quindi il db viene salvato insieme al commit e ripristinato al pull in produzione.

Sviluppo, Staging, Produzione

I contenuti sono modificati in produzione. Gli aggiornamenti di Joomla vengono eseguiti su Staging. Dopo averli inviati, vai su estensioni/database e premi Correggi. Oppure, per server più grandi, automatizzalo con un plug-in di sistema (scrivi un plug-in che ascolta alcuni parametri in onAfterRoute, controlla se si tratta di una chiamata locale ($ _SERVER ['REMOTE_ADDR'] = '127.0.0.1' e pianifica un lavoro cron su invocarlo).

pdate

Per eseguire gli aggiornamenti db dopo ogni aggiornamento della versione, sono disponibili due modi:

Automatic

Vai su amministratore - estensioni - gestore estensioni, fai clic su database a sinistra e fai clic su "Correggi" in alto.

Se questa pagina presenta errori (il caso durante l'aggiornamento da 2.5 a 3.3), prova ad andare direttamente all'URL:

/administrator/index.php?option=com_installer&view=database

Manuale

Quando quanto sopra fallisce (vedi anche il commento di @ Diego sotto):

 find administrator/components/com_admin/sql/updates/mysql/3*.sql | grep mysql > 33.listsql

e rimpiazzare i file pertinenti (le versioni interessate sono nel nome del file)

Quindi, a condizione che j25 sia il prefisso db

cat 33.listsql | xargs cat > 33.sql
sed -i 's/#_/j25/' 33.sql
mysql -u user --password="somepass" dbname < 33.sql
1
Riccardo Zorn