source

서버를 재부팅하지 않고 .env 변수 새로고침(Larabel 5, 공유 호스팅)

manycodes 2023. 1. 15. 17:18
반응형

서버를 재부팅하지 않고 .env 변수 새로고침(Larabel 5, 공유 호스팅)

Larabel 5는 데이터베이스가 설정될 때까지 정상 실행하다가 다음 오류를 발견했습니다.

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

조사를 해보니 MySQL 액세스 설정이 너무 늦었기 때문에 올바른 환경변수를 얻기 위해 서버를 재시작해야 합니다.드림호스트의 공유 서버를 사용하고 있는데 그럴 수가 없어요.

이 문제를 어떻게 해결해야 합니까?

감사해요.

도면면면면면을 php artisan config:cacheLaravel 앱에 수 ..envfilename을 클릭합니다.

실행합니다.php artisan config:clear그걸 고치려고.

오래된 파일인 것은 알지만 로컬 개발의 경우 운영 .env 파일로 복구된 것은 다음과 같습니다.

rm bootstrap/cache/config.php

그리고나서

php artisan config:cache
php artisan config:clear
php artisan cache:clear

구성 변수가 캐시될 수 있습니다.config/app.php 당신의 신 as as as as as as as as도.env then 파 file

php artisan cache:clear

커맨드 라인에 표시됩니다.

명확하게 하기 위해 케이스에 따라 4종류의 캐시를 클리어할 수 있습니다.

php artisan cache:clear

응용 프로그램캐시를 클리어하는 경우 위의 문을 콘솔에서 실행할 수 있습니다.이 명령어는 스토리지\framework\cache 내의 모든 캐시를 클리어합니다.

php artisan route:cache

루트 캐시가 클리어 됩니다.따라서 새로운 루트를 추가했거나 루트 컨트롤러 또는 액션을 변경한 경우 이 루트를 사용하여 동일한 루트를 새로고침할 수 있습니다.

php artisan config:cache 

그러면 env 파일의 캐시가 지워지고 새로고침됩니다.

php artisan view:clear 

그러면 응용 프로그램의 컴파일된 보기 파일이 지워집니다.

공유 호스팅의 경우

대부분의 공유 호스팅 공급자는 시스템에 SSH 액세스를 제공하지 않습니다.이 경우, 다음과 같이 루트를 작성해, 다음의 회선을 호출할 필요가 있습니다.

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

간단한 해결책:

use Dotenv;

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

저 같은 경우에는 .env로 변경한 후 데이터베이스 연결을 재정립해야 하는데 작동하지 않았습니다.이 문제가 발생하면 다음을 시도해 보십시오.

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

이 이전에 연결에 하고 .env, Laravel App에 액세스할 수 입니다.\Illuminate\Database\DatabaseManager는 설정 파라미터를 다시 읽어야 합니다.

webserver를 새로고침할 수 없거나(큐러너와 같은 장시간 실행 콘솔명령어) .env 파일을 mid-request로 새로고침할 필요가 있는 경우에 대비하여 레벨5에서 .env 변수를 올바르게 새로고침할 수 있는 방법을 찾았습니다.

use Dotenv;
use InvalidArgumentException;

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

새로고침과 관련하여 이 질문만 찾을 수 있습니다..env그래서config($key)기존 앱 인스턴스의 값이지만, 이러한 답변의 대부분은 다른 질문에 의존해야 합니다.

Larabel 6.x 어플리케이션에서 작업하기 위해 다음과 같은 정보를 얻었는데, 이는 편백 환경 변수를 장인 명령어로 사용하려고 했던 것입니다.

콘텍스트의 경우$this->laravel === app().

    /**
     * Make the application use the cypress environment variables
     *
     * @return void
     */
    protected function enableCypressEnv()
    {
        // Get all of the original values from config. We need to do this because
        // rebuilding config will skip packages.
        $old = app(Repository::class)->all();

        // Change the applications env file
        $this->laravel->loadEnvironmentFrom('.env.cypress');

        // Reload the app's environment variables 
        Dotenv::create(
            $this->laravel->environmentPath(),
            $this->laravel->environmentFile(),
            Env::getFactory()
        )->overload();

        // Force config to be rebuitl with new env
        (new LoadConfiguration())->bootstrap($this->laravel);
        
        // Get all of the new values from buidling with new env
        $new = app(Repository::class)->all();

        // Merge the new values over the old distinctly
        $merged = array_merge_recursive_distinct($old, $new);

        // Get the applications configuration instance
        $config = config();

        // Overwrite all of the values in the container in accordance with the merged values
        foreach ($merged as $key => $value) {
            $config->set([$key => $value]);
        }
    }

위의 답변에 대해 올바른 방향을 제시한다고 외치십시오.다만, 어느 대답도 나에게 딱 들어맞지 않았기 때문에, 여기에 제 답변을 포함시키겠습니다.

config/database.php기본 DB 연결을 mysql에서 sqlite로 변경했습니다.삭제했습니다..env파일(실제 이름 변경)을 사용하여 sqlite 파일을 만듭니다.touch storage/database.sqlitesqlite를 사용한 이행은 성공했습니다.

그리고 나서 다시 스위치를 켰습니다.config/database.phpmysql에 대한 기본 DB 연결 및 복구.env파일입니다. mysql로 이행이 실행되었습니다.

말이 안 되는 것 같아요.어쩌면 서버사이드였을지도 몰라

언급URL : https://stackoverflow.com/questions/32423034/reloading-env-variables-without-restarting-server-laravel-5-shared-hosting

반응형