dtrb96410 2015-03-04 12:33
浏览 44
已采纳

在同一服务器上为多个HTTP主机部署相同的Laravel代码库

I have written a backend in Laravel which I need to deploy twice on the same physical server. I need to use two different databases for these, but as they are on the same server I cannot use the built-in host detection in Laravel.

For the moment, I have "fixed" the issue by wrapping my configuration files in this code:

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

But this breaks artisan, so no more php artisan down|up or php artisan cache:clear.

There must be a better way to achieve this, no?

  • 写回答

1条回答 默认 最新

  • donglu8334 2015-03-04 12:39
    关注

    By default Laravel uses your hostname, as you say - however you can also pass a closure to the detectEnvironment method to use more complex logic to set your environment.

    Something like this, for example:

    $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.');
        }
    });
    

    This doesn't deal with artisan, however - HTTP_HOST won't be set there. If the different sites are running under different users you can do another separate switch statement using $_SERVER['USER'] for example. If not you could also use the path of the install as a way to differentiate.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上