2014-08-29 29 views
5

Sto utilizzando Github per distribuire i miei siti sul mio server di produzione. Per questo motivo non voglio memorizzare .env. *. Php file tutto così sono nel mio .gitignore.Variabili d'ambiente e artigiano non funzionanti sul server di produzione

All'interno di ogni directory ambiente ho impostato la configurazione del database da utilizzare getenv(), ad esempio:

<?php 

'connections' => array(

    'mysql' => array(
     'driver' => 'mysql', 
     'host'  => getenv('DB_HOST'), 
     'database' => getenv('DB_NAME'), 
     'username' => getenv('DB_USERNAME'), 
     'password' => getenv('DB_PASSWORD'), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 


), 

); 

Sono poi andato al file conf apache per i miei host virtuali e impostare le variabili d'ambiente, così:

SetEnv DB_HOST ***.***.***.*** 
SetEnv DB_NAME database 
SetEnv DB_USERNAME databaseuser 
SetEnv DB_PASSWORD databasepass 

Tutto questo funziona perfettamente sul server di produzione.

Tuttavia, al momento ho semplicemente importato il database anziché utilizzare php artisan migrate perché non funziona.

So che non funziona perché non colpisce apache quindi le variabili non vengono impostate, ma ho provato numerosi modi per cercare di aggirare questo problema, ma non ho avuto fortuna ancora.

Ho provato a forzare l'ambiente per vedere se è possibile ottenere le variabili utilizzando php artisan --env=production migrate

Ho anche provato il controllo che sta utilizzando l'ambiente corretto eseguendo php artisan env e che sta utilizzando l'ambiente di produzione che è corretto .

La mia prossima idea era quella di creare manualmente un file .env.production.php sul server di produzione. Ho creato uno e usato getenv() nel caso in cui abbia funzionato in questo modo, ma si è verificato lo stesso errore, quindi ho provato a impostare le variabili manualmente senza usare getenv() e non ho ancora avuto fortuna.

Qualsiasi idea sarebbe molto apprezzata.

+0

file di produzione .env sono chiamati .env.php non .env.production.php –

+0

Ho creato un ambiente all'interno del bootstrap/start.php con il nome di 'produzione', sarebbe questo non funziona comunque? – Karl

+0

Ho appena provato il file .env.php, che funziona se imposto manualmente le variabili, posso utilizzare le variabili impostate tramite apache per lavorare con artisan? – Karl

risposta

1

È necessario utilizzare i file .env.php come descritto nello laravel docs.

Per impostare le variabili di ambiente nella produzione, si utilizza un file denominato .env.php nella root del progetto:

<?php 

# .env.php 

return array(

    'DB_HOST' => 'localhost', 
    'DB_NAME' => 'my_database', 
    'DB_USER' => 'user_name', 
    'DB_PASS' => 'super-secret-sauce', 

); 

per diversi ambienti, è possibile utilizzare diversi file .env. Ad esempio, nell'ambiente locale si utilizzerà e per il test si utilizzerà .env.testing.php.

Quando si eseguono comandi artistici come migrate o db:seed, è possibile specificare l'ambiente utilizzando l'opzione --env=.

Per esempio $ php artisan db:seed --class=UsersTableSeeder --env=testing

+0

funzionano solo in laravel 5. Utilizza laravel 4 –

+0

@RichardTorcato: i file '.env. *. Php' sono per laravel 4. I file' .env' sono per laravel 5. Il modo più semplice per dire la differenza è che i file env in L4 erano file php. Inoltre, il link che ho indicato nei documenti è specifico per Laravel 4. – ryanwinchester

Problemi correlati