2011-09-09 11 views
12

A causa dei vincoli di implementazione, vorrei avere le directory log e cache utilizzate dall'applicazione Symfony2 da qualche parte in/var/... nel mio file system. Per questo motivo, sto cercando un modo per configurare Symfony e per sovrascrivere il percorso predefinito per queste due directory.Modifica cache_dir e log_dir con Symfony2

Ho visto kernel.cache_dir e kernel.log_dir e ho letto la classe Kernel.php. Da quello che ho visto, non penso che sia possibile cambiare la posizione della directory per configurazione e dovrei applicare la patch alla classe Kernel.php.

È vero o esiste un modo per ottenere ciò che voglio senza modificare il codice del framework?

risposta

5

Penso che il modo più semplice sia quello di collegare la cartella in un altro posto. Lo abbiamo fatto sul server prod, ma quando sviluppi locale forse su Windows è un po 'complicato impostare i symlink.

ln -s /var/cache/ /var/www/project/app/cache 

qualcosa come questo.

+0

ho risolto un sacco di problemi (come gli insetti stupidi in Assetic) molto facilmente con 'ln -snf', questo è la strada da percorrere. – ChocoDeveloper

16

Aggiungere i seguenti metodi per app/AppKernel.php (AppKernel estende Kernel) facendoli tornare i tuoi percorsi preferiti:

public function getCacheDir() 
{ 
    return $this->rootDir . '/my_cache/' . $this->environment; 
} 

public function getLogDir() 
{ 
    return $this->rootDir . '/my_logs'; 
} 
7

ero felice di trovare il tuo post, ma ero un po 'confuso della risposte inutili.

Ho avuto lo stesso problema e ho scoperto che i registri dipendono dal parametro di configurazione kernel.logs_dir.

Così ho aggiunto ai miei config.yml parametri:

kernel.logs_dir: /var/log/symfonyLogs 

Spero che sarà utile per voi, anche, se una risposta tardiva.

0

ho usato il configuration solution from Dragnic ma ho messo i percorsi nel file parameters.yml perché questo file viene ignorato da git. in altre parole, non è sincronizzato dal mio PC al repository git quindi non c'è alcun impatto nell'ambiente prod.

# app/config/parameters.yml 
parameters: 
    database_driver: pdo_mysql 
    [...] 
    kernel.cache_dir: "T:/project/cache" 
    kernel.logs_dir: "T:/project/logs" 

Configurazione: Windows7, WAMP 2.4 e Symfony 2.3.20.

Ma bisogna sapere che:

sovrascrittura del parametro kernel.cache_dir dal file di configurazione è una pessima idea, e non un modo supportato per modificare la cartella di cache in Symfony.

Rompe le cose perché ora avresti diverse cartelle cache per il kernel Kernel::getCacheDir() e per il parametro.

Fonte: https://github.com/symfony/AsseticBundle/issues/370

così si dovrebbe usare solo in dev ambiente e se non si desidera modificare il contenuto del file app/AppKernel.php, altrimenti vedere le altre risposte.

+1

ATTENZIONE => IDEA CATTIVA !!! soprattutto se stai usando Assetic: https://github.com/symfony/AsseticBundle/issues/370 – Oliboy50

+0

@ Oliboy50: grazie, ho aggiornato la mia risposta per avvisare gli utenti. –

3

Vorrei offrire un'alternativa e cioè impostare le variabili di ambiente per modificare queste directory. In questo modo è più facile impostare in base al livello. Le variabili di ambiente (test, produzione o di sviluppo)

export SYMFONY__KERNEL__CACHE_DIR "/your/directory/cache" 
export SYMFONY__KERNEL__LOGS_DIR "/your/directory/logs" 

possono anche essere impostati nell'ospite virtuale con SetEnv. Durante la lettura dei parametri del kernel symfony cercherà tutte le variabili $ _SERVER che iniziano con SYMFONY__, spoglia la prima parte e converte tutti i doppi underscore in a.

Source code

See linea 568-608