2015-03-03 12 views
7

Recentemente ho spostato un sistema Symfony su un altro server e ho ricevuto un errore da allora. I dettagli tecnici sono: Un server Apache 2.4 su un server Windows 2012 un fileserver cui si può accedere da Apache sulla rete localeSymfony: InvalidArgumentException durante l'analisi di web.xml

Quando mi sono trasferito lo Symfony pagine ho cancellato la cache. Quello che succede ora è, che ottengo questi messaggi d'errore:

InvalidArgumentException: Unable to parse file "\\FILESERVER\PAGEPATH\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\DependencyInjection/../Resources/config\web.xml". 

e

InvalidArgumentException: [WARNING 1549] failed to load external entity "file://///FILESERVER/PAGEPATH/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd" (in n/a - line 0, column 0) 
[WARNING 3084] Element '{http://www.w3.org/2001/XMLSchema}import': Failed to locate a schema at location 'file://///FILESERVER/PAGEPATH/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd'. Skipping the import. (in in_memory_buffer - line 8, column 0) 
[ERROR 1845] Element '{http://symfony.com/schema/dic/services}container': No matching global declaration available for the validation root. (in //FILESERVER/PAGEPATH/web/ - line 5, column 0) 

Quello che sembra essere il problema, che nel primo errore, v'è una miscela di barre e backslash nel percorso ma non ho idea di come risolvere questo problema.

+0

sembra stupido ma .... puoi provare [questo] (http://stackoverflow.com/questions/21110262/symfony2-0-invalidargumentexception) soluzioni? – Matteo

+0

Riavvio del computer? Sì, ho provato questo. – frieder

+0

Ho aggiornato la mia risposta. Spero possa aiutare. – kba

risposta

2

Questo problema è dovuto all'utilizzo del percorso UNC (\\ qualcosa). Ho avuto lo stesso problema nell'ambiente di rete Windows con IIS e Symfony su un altro server. Sfortunatamente, non sono stato in grado di trovare una soluzione. Ho finito per avere il codice sorgente sulla stessa macchina e utilizzando il percorso locale.

EDIT: Ho trovato un'altra possibile soluzione: collegamento simbolico.

mklink /d C:\myroot \\FILESERVER\PAGEPATH 

Ora è possibile vedere in C: \ myroot contenuto della cartella condivisa. Non so se Apache sarà soddisfatto ma IIS non ha problemi. E ancora una cosa, essere preparati per alcuni problemi di prestazioni a causa del trasferimento di rete.

+0

A Apache non piace questo. – frieder

+1

Come funziona l'opzione FollowSymlinks nella configurazione di Apache? L'hai configurato? – kba

+0

sì, ora funziona – frieder

0

Se il percorso UNC è il problema, forse funziona se si mappa la condivisione di rete su un'unità locale e si utilizzano i percorsi sull'unità locale per accedere all'applicazione.

Mappa \\FILESERVER\PAGEPATH su un disco locale, diciamo W: (W da web) quindi configurare web root di Apache per invece di \\FILESERVER\PAGEPATH\web. Immagino che tutti gli altri riferimenti ai percorsi siano relativi e che non sia necessario modificare nient'altro.

(solo un pensiero)

Aggiornamento:

Come utente normale, è possibile mappare una condivisione di rete come unità locale e lo hanno automaticamente ri-collegare su ogni accesso utilizzando la seguente riga di comando:

C:\> net use W: \\FILESERVER\PAGEPATH /persistent:yes 

Apache non viene eseguito come un utente normale (non ho un sistema Windows a portata di mano, ma penso che sia eseguito come SYSTEM USER). Non riesco a capire se gli utenti speciali "accedono" all'avvio di Windows.

Tuttavia, penso che sia possibile eseguire il comando precedente (memorizzato in un file .cmd) utilizzando l'Utilità di pianificazione (su Windows 7 o successivi), ogni volta che Windows si avvia.

+0

Se c'è la possibilità di montare questa unità all'avvio di Windows senza necessità di accesso utente, potrebbe funzionare. – kba

+0

Non ho un sistema Windows a portata di mano (non funzionava su Windows da 3 anni fa) ma per quanto posso ricordare la riga di comando 'net' può essere usata per montare cartelle condivise. Controlla questo articolo: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/net_use.mspx?mfr=true per le opzioni. – axiac

+0

Hmm ... le connessioni vengono ripristinate all'accesso. Apache non viene eseguito come utente normale, suppongo che non si colleghi. :-( – axiac

1

Non sono sicuro se questo è correlato al problema, ma una volta ho riscontrato problemi durante l'analisi dei file XML quando non è stato possibile caricare il file di definizione dello schema in fase di analisi. Il parser ha provato a caricare il file dello schema XML tramite rete e nel caso in cui la connessione di rete non riuscisse, anche l'analisi del file XML non è riuscita.

Se si è in produzione, per motivi di prestazioni non è consigliabile una convalida dello schema, quindi controllare se il parser utilizzato offre un modo per disattivare la convalida dello schema automatico. Se tuttavia si verifica l'errore nel flusso di lavoro di sviluppo, assicurarsi che gli URL dello schema possano effettivamente essere risolti dal server Web che analizza il file XML.

Problemi correlati