web-dev-qa-db-fra.com

Rechargement de variables .env sans redémarrage du serveur (Laravel 5, hébergement partagé)

Mon Laravel 5 a fonctionné jusqu'à la configuration de la base de données, puis a détecté l'erreur suivante:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

En faisant des recherches, il semble que j’ai configuré l’accès MySQL trop tard. Je devrais donc redémarrer le serveur afin d’obtenir les variables d’environnement correctes. Eh bien, j'utilise le serveur partagé de Dreamhost et je ne peux tout simplement pas le faire.

Comment dois-je résoudre ce problème?

Merci

22
godsaway

Si vous avez couru php artisan config:cache _ sur votre serveur, votre application Laravel pourrait mettre en cache les paramètres de configuration obsolètes que vous avez mis dans le .env fichier.

Courir php artisan config:clear pour résoudre ce problème.

55
morph

Il est possible que vos variables de configuration soient mises en cache. Vérifiez votre config/app.php Ainsi que votre fichier .env Puis essayez

php artisan cache:clear

sur la ligne de commande.

12
AurelienT

Je sais que c'est vieux, mais pour les développeurs locaux, c'est ce qui a ramené les choses dans un fichier .env de production:

rm bootstrap/cache/config.php

puis

php artisan config:cache
php artisan config:clear
php artisan cache:clear
5
Janiis

Une solution courte:

use Dotenv;

with(new Dotenv(app()->environmentPath(), app()->environmentFile()))->overload();
with(new LoadConfiguration())->bootstrap(app());

Dans mon cas, je devais rétablir la connexion à la base de données après avoir modifié .env par programme, mais cela ne fonctionnait pas. Si vous rencontrez des problèmes, essayez ceci.

app('db')->purge($connection->getName()); 

après le rechargement .env, c’est que Laravel App aurait pu accéder à la connexion par défaut auparavant et au \Illuminate\Database\DatabaseManager a besoin de relire les paramètres de configuration.

4
MatteoOreficeIT

Au cas où quelqu'un tomberait sur cette question et ne pourrait pas recharger son serveur Web (commande console longue comme un coureur de file d'attente) ou s'il devait recharger son fichier .env à mi-requête, j'ai trouvé un moyen de recharger correctement les variables .env dans laravel 5.

use Dotenv;
use InvalidArgumentException;

try {
    Dotenv::makeMutable();
    Dotenv::load(app()->environmentPath(), app()->environmentFile());
    Dotenv::makeImmutable();
} catch (InvalidArgumentException $e) {
    //
}
3
Question Mark

Pour être clair, il existe 4 types de caches que vous pouvez effacer en fonction de votre cas.

php artisan cache:clear

Vous pouvez exécuter l'instruction ci-dessus dans votre console lorsque vous souhaitez effacer le cache de l'application. En réalité, cette instruction efface tous les caches de storage\framework\cache.

php artisan route:cache

Cela efface le cache de votre itinéraire. Ainsi, si vous avez ajouté un nouvel itinéraire ou modifié un contrôleur d’itinéraire ou une action, vous pouvez utiliser celui-ci pour le recharger.

php artisan config:cache 

Cela effacera la mise en cache du fichier env et le rechargera

php artisan view:clear 

Cela effacera les fichiers de vue compilés de votre application.

Pour l'hébergement partagé

La plupart des fournisseurs d'hébergement partagé ne fournissent pas d'accès SSH aux systèmes. Dans ce cas, vous devrez créer un itinéraire et appeler la ligne suivante comme suit:

Route::get('/clear-cache', function() {
    Artisan::call('cache:clear');
    return "All cache cleared";
});
0
Dibyendu Mitra Roy