Domanda

Ho progettato un / che utilizza un semplice meccanismo di cache file JavaScript bundler e minifier foglio di stile. Scrive semplicemente in un file il timestamp di ogni file in bundle e confronta questi timestamp per evitare di riscrivere il file "master" di nuovo. In questo modo, dopo un aggiornamento dell'applicazione (qui il mio sito web), in cui sono stati modificati i file CSS e JS, una singola richiesta innescherebbe la memorizzazione nella cache di nuovo solo una volta. Questo, e tutte le altre richieste sarebbe poi vedere un file compilato come master.css? V = 1234567.

La cosa è, sotto il mio ambiente di sviluppo, ogni test passano, l'integrazione funziona perfettamente e tutto funziona come previsto. Tuttavia, il mio ambiente di staging, su un server con PHP5.3 compilato con FastCGI, i miei file memorizzati nella cache sembra avere riscritto con dati non validi, ma solo quando non è richiesto dallo stesso browser.

Caso d'uso:

  • I fare la prima richiesta su Firefox, sotto Linux. Tutto funziona come previsto per tutte le altre richieste su quel browser.
  • Non appena faccio una richiesta su Windows / Linux (IE7, IE8, Chrome, ecc) il mio file di cache riceve i dati non validi, ma solo sul server di gestione temporanea in esecuzione sotto FastCGI, non in fase di sviluppo!
  • Running back un'altra richiesta su Firefox recaches il file in modo corretto.

Mi è stato poi chiedevo, fa FastCGI ha nulla a che fare con esso? Ho pensato che i clienti del suo navigatore web o anche i sistemi operativi non hanno nulla a che fare con il codice lato server.

So che questo problema è astrattamente descritta, ma incollare qualsiasi codice di cemento sarebbe troppo pesante IMO, ma lo farò se può chiarire la mia domanda.

Ho provato a distanza il debug il mio codice, e ha scoperto che tutto era ancora lavorando come previsto, anche il file memorizzato nella cache viene scritto in modo corretto. Ho visto che quando si verifica l'errore, il file viene scritto con i dati attesi, ma poi viene riscritto di nuovo con dati non validi dopo due secondi -dopo php ha terminato la sua esecuzione -!

C'è un modo per disattivare che FastCGI la cache per le richieste specifiche attraverso una funzione PHP forse?

È stato utile?

Soluzione

A seconda dell'ambiente, si poteva guardare a lavorare qualcosa fuori usando .htaccess in Apache per servire tali richieste in modalità CGI regolare. Questo potrebbe probabilmente essere fatto con un semplice AddHandler e azione che punti al CGI direttamente. Questo tipo di presuppone che si sta distribuendo a qualche tipo di ambiente di hosting condiviso in cui non si dispone di un accesso diretto alla configurazione di Apache.

Dal FastCGI persiste il processo per un certo periodo di tempo, ha senso che si potrebbe sovrascrivere il file in un secondo momento dopo l'esecuzione iniziale, anche se ciò che il particolare bug potrebbe essere è oltre me.

Non molto aiuto, lo so, ma potrebbe dare un paio di idee ...

EDIT: Ecco il codice .htaccess dal mio commento qui sotto

Options -Indexes +FollowSymLinks +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php5.cgi
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top