2009-04-07 17 views
25

Oggi è piuttosto normale che le applicazioni desktop si aggiornino automaticamente. Su Mac, ogni programma non Apple che utilizza Sparkle nel mio libro è una vittoria istantanea. Per gli sviluppatori Windows, this has already been discussed at length. Non ho ancora trovato informazioni sulle applicazioni web ad aggiornamento automatico e spero che tu possa aiutare.Quali sono le migliori pratiche per l'auto aggiornamento di applicazioni PHP + MySQL?

Sto costruendo un'applicazione Web che deve essere installata come Wordpress o Drupal: decomprimila in una directory, fai clic su una pagina di installazione ed è pronta per andare. Per avere un'ampia compatibilità con i server, mi è stato chiesto di usare PHP e MySQL - è quel ** MP? In ogni caso, deve essere ampiamente multipiattaforma. Per il contesto, questa è fondamentalmente un'applicazione di messaggistica web unificata per le piccole imprese. Non è un'altra piattaforma CMS, pensa alla webmail.

Desidero conoscere le applicazioni Web ad autoaggiornamento. Prima di tutto, (1) questa è una cattiva idea? A partire da Wordpress 2.7, l'aggiornamento automatico è un singolo pulsante, il che sembra facile, eppure posso immaginare così tanti modi che questo potrebbe andare terribilmente, terribilmente sbagliato. Inoltre, l'idea che i file web siano scrivibili dal processo Web non è un problema di sicurezza?

(2) Vale la pena il tempo di sviluppo? Ci sono probabilmente milioni di installazioni di WP nel mondo, quindi probabilmente vale la pena il tempo necessario al team di WP per semplificare, risparmiando milioni di ore di lavoro in tutto il mondo. Posso solo immaginare qualche migliaio di installazioni del mio software - sta costruendo l'auto-aggiornamento che vale il tempo di investimento, o posso supporre che gli utenti abbastanza sofisticati da scaricare e installare il software web in primo luogo possano passare attraverso una checklist per l'aggiornamento?

Se non si tratta di un disastro di sicurezza o di perdita di tempo, quindi (3) sto cercando suggerimenti da chiunque lo abbia fatto prima. Mantieni una tabella delle versioni nel tuo database? Come gestisci gli aggiornamenti del DB? Quale metodo si utilizza per ripristinare un aggiornamento parziale nel contesto di un'applicazione Web autoaggiornante? L'uso di un layer ORM lo rendeva più facile o più difficile? Mantenete un delta di modifiche alla versione o semplicemente spegnete il tutto ogni volta?

Apprezzo i tuoi pensieri su questo.

+0

ottima domanda. Penso che l'aggiornamento automatico non solo riduca le ore di installazione, ma ti dà la possibilità di risolvere i problemi di sicurezza distribuiti al volo. così tante applicazioni open source vengono sfruttate in massa una volta trovato un buco di sicurezza. ma hai ragione, ci sono così tante cose che potrebbero andare storte. cosa succede se l'utente personalizza il proprio codice per uno? – dqhendricks

+0

Avevo chiesto una [domanda simile] (http://stackoverflow.com/questions/558535/should-a-web-app-have-automatic-upate) che potrebbe essere utile. – VirtuosiMedia

risposta

12

Francamente, dipende davvero dalla tua base utente. Ci sono tonnellate di applicazioni PHP che non si aggiornano automaticamente da sole. I loro utenti sono abbastanza tecnici per gestire il processo di aggiornamento, o semplicemente non aggiornano.

mi propongo due fasi:

1) Scherzi a chiedersi che cosa gli utenti rischiano di veramente bisogno. L'autoaggiornamento fornirà abbastanza spinta all'adozione per giustificare il lavoro aggiuntivo? Se sei sicuro che la risposta sia sì, fallo e basta.

Dato che me lo stai chiedendo, immagino che tu non lo sappia ancora. In tal caso, scopo 2:

2) Rilasciare la versione 1.0 senza la funzione. Attendi il feedback degli utenti. I tuoi utenti potrebbero immediatamente piangere per un processo di aggiornamento più semplice, nel qual caso dovresti dare la priorità a questo. In alternativa, potresti scoprire che i tuoi utenti sono molto più interessati ad altre funzionalità.

Indovinare ciò che gli utenti desiderano senza chiedere loro è un buon modo per sprecare un sacco di tempo di sviluppo su cose di cui le persone non hanno realmente bisogno.

3

Suppongo che tu l'abbia già escluso, ma potresti ospitarlo come servizio. (Pensate a wordpress.com)

+0

Non l'ho escluso affatto; vogliamo fare entrambe le cose, in realtà. –

1

Penso che la vostra migliore opzione sia un meccanismo di controllo degli aggiornamenti che avviserà l'amministratore quando ci sono aggiornamenti (s).

Come si cita, ci sono una serie di potenziali problemi di sicurezza. A causa di quelli soli, suggerirei di non farlo. Invece, prova a creare uno script di aggiornamento abbastanza intelligente.

3

Suggerirei di confezionare l'applicazione con pear e set up a channel. Gli utenti possono quindi aggiornare l'applicazione tramite un'interfaccia standard (pera). Non è completamente automatico (a meno che gli utenti non abbiano un qualche tipo di automazione in esecuzione su Pera), ma è standard, quindi qualsiasi amministratore di sistema può mantenerlo.

1

Solo i miei 2 centesimi: Ho piacerebbe prendere in considerazione un programma di aggiornamento automatico di sé nel mio CMS come un buco di sicurezza, quindi se si decide di codificare questa funzione, si dovrebbe prendere in considerazione di implementare diversi livelli di questo comportamento:

  • aggiorna automaticamente
  • Verifica aggiornamenti e notificare
  • Disabilita
4

ho pensato a questo ultimamente per quanto riguarda le modifiche allo schema di database. Al momento sto scavando in WordPress per vedere come hanno gestito le modifiche del database tra le revisioni. Ecco cosa ho trovato finora:

$wp_db_version caricato da wp-includes/version.php. Questa variabile corrisponde a un numero di revisione di Subversion e viene aggiornata quando viene modificato wp-admin/includes/schema.php. (Probabilmente attraverso un gancio? Non sono sicuro.) Quando viene caricato, l'opzione WordPress denominata db_version viene letta dal database. Se questo numero non è uguale a $wp_db_version, viene caricato wp-admin/upgrade.php.

wp-admin/includes/upgrade.php include una funzione denominata dbDelta(). dbDelta() scansioni $wp_queries (una stringa di query SQL che creerà lo schema del database più recente da zero) e lo confronta con lo schema nel database, modificando le tabelle in base alle necessità in modo che lo schema sia aggiornato.

upgrade.php quindi esegue una funzione denominata upgrade_all() che esegue specifiche funzioni upgrade_NNN() se $wp_db_version è inferiore ai valori di destinazione. (ad esempio, upgrade_250(), l'aggiornamento di WordPress 2.5.0 verrà eseguito se la versione del database è inferiore a 7499.) Ognuna di queste funzioni esegue le proprie procedure di migrazione e popolamento dei dati, alcune delle quali vengono richiamate durante lo script iniziale di installazione del database. Taglia bene il codice duplicato.

Quindi, questo è un modo per farlo.

4

Sì, sarebbe una funzione di sicurezza se PHP andasse a sovrascrivere i suoi file da qualche punto su Internet senza preavviso. Non c'è alcuna garanzia che il server si colleghi correttamente a il tuo server di aggiornamento (potrebbe scaricare codice di qualcuno creato da qualcun altro se si è verificato un avvelenamento del DNS) - dando a qualcun altro l'accesso ai dati del tuo cliente. Pertanto la firma digitale sarebbe importante.

L'utente può controllare gli aggiornamenti impostando le autorizzazioni sulla directory Web in modo che PHP abbia solo accesso in lettura ai file - questa procedura potrebbe semplicemente essere documentata con il programma.

Una domanda rimane (non so davvero la risposta): può PHP sovrascrivere i file se attualmente li sta utilizzando (ad esempio se il file update.php stesso doveva essere aggiornato)? Vale la pena testare.

Problemi correlati