0

同じ物理サーバーに 2 回デプロイする必要があるバックエンドを Laravel で作成しました。これらには 2 つの異なるデータベースを使用する必要がありますが、それらが同じサーバー上にあるため、Laravel に組み込まれているホスト検出を使用できません。

とりあえず、構成ファイルを次のコードでラップして問題を「修正」しました。

if ($_SERVER["HTTP_HOST"] === "example.com") {
    return config array...
} else if ($_SERVER["HTTP_HOST"] === "example.net") {
    return config array...
}

しかし、これは職人を壊すので、これ以上php artisan down|upまたはphp artisan cache:clear.

これを達成するためのより良い方法があるはずですよね?

4

1 に答える 1

2

あなたが言うように、デフォルトではLaravelはホスト名を使用しますが、detectEnvironmentメソッドにクロージャーを渡して、より複雑なロジックを使用して環境を設定することもできます。

たとえば、次のようなものです。

$env = $app->detectEnvironment(function()
{
    // if statements because staging and live used the same domain,
    // and this app used wildcard subdomains. you could compress this 
    // to a switch if your logic is simpler.
    if (isset($_SERVER['HTTP_HOST']))
    {
        if (ends_with($_SERVER['HTTP_HOST'], 'local.dev'))
        {
            return 'local';
        }

        if (ends_with($_SERVER['HTTP_HOST'], 'staging.server.com'))
        {
            return 'staging';
        }

        if (ends_with($_SERVER['HTTP_HOST'], 'server.com'))
        {
            return 'production';
        }

        // Make sure there is always an environment set.
        throw new RuntimeException('Could not determine the execution environment.');
    }
});

ただし、これは職人を扱っていません -HTTP_HOSTそこには設定されません。異なるサイトが異なるユーザーの下で実行されている場合は、たとえば、別の別の switch ステートメントを実行できます$_SERVER['USER']。そうでない場合は、区別する方法としてインストールのパスを使用することもできます。

于 2015-03-04T12:39:41.057 に答える