【问题标题】:Laravel show maintenance mode during composer updateLaravel 在作曲家更新期间显示维护模式
【发布时间】:2016-05-25 16:30:41
【问题描述】:

我有一个与这个未回答的问题非常相似的问题:laravel 5 maintenance page broken during composer update

我是 Laravel 新手(使用 5.2 版),正在尝试制定部署过程。从我收集到的信息来看,我想要使用的工作流程(当然,一旦我在开发服务器上做出并彻底测试了更改)是将生产站点置于维护模式,通过 git 部署更改,运行 composer/工匠任务(composer updatephp artisan migrate 等),然后将生产站点退出维护模式。

我遇到的问题是,如果我在 config/app.php 中有新的提供程序,即使在维护模式下,实时站点也会显示错误消息(直到我运行 composer update)。

有没有办法让维护模式视图覆盖错误视图,这样我就可以安心地执行更新,而不会让网站告诉全世界有错误?我关闭了错误报告,所以它至少不显示细节,但如果它在维护模式启用时保留任何提及 DL 上的错误,我会喜欢它。

或者,是否有更好的部署工作流程可以用来一起消除这个问题?

【问题讨论】:

  • 你在使用php artisan downup吗?
  • 如果你能告诉我,你的头像是在哪里生成的?

标签: php laravel-5


【解决方案1】:

为什么不使用symlinks 发布?下面是我在 Laravel 应用程序中使用Envoy 的部署过程示例。除了 PHP 变量表示法之外,如果您不使用 Envoy,则可以直接替换纯 bash/shell 脚本。本质上,拥有一个脚本可以使部署自动化,并且使用符号链接可以使更新几乎是即时的。其他好处包括在需要回滚时不幸存在的先前版本。

注意:以下脚本做了一些基本假设:

  • 您的.env 文件位于$root_dir 中(例如:/var/www/my-website/.env)。
  • 您的虚拟主机指向$root_dir 中的site/public 目录(例如:/var/www/my-website/site/public)。但是,如果您无法更新 vhost,您只需在下面的空行中添加以下内容即可:

    ln -nfs {{ $app_dir }}/public {{ $root_dir }}/public ;
    sudo chgrp -h www-data {{ $root_dir }}/public;
    
  • 您已添加 SSH 密钥以从 Git 存储库中提取

  • (可选)nodejs 已安装

以下是脚本的相关示例变量:

$repo        = 'git@bitbucket.org:myusername/my-repo.git';
$root_dir    = '/var/www/my-website';
$release_dir = '/var/www/my-website/releases';
$app_dir     = '/var/www/my-website/site';
$release     = 'release_' . date('YmdHis');
$branch      = 'master';

这是部署过程的要点和代码:

  1. 将更新后的代码提取到新的发布目录中:

    @task('fetch_repo')
    [ -d {{ $release_dir }} ] || mkdir {{ $release_dir }};
    cd {{ $release_dir }};
    git clone {{ $repo }} -b {{ $branch }} {{ $release }};
    @endtask
    
  2. 通过运行composer安装依赖:

    @task('run_composer')
    cd {{ $release_dir }}/{{ $release }};
    composer install;
    @endtask
    
  3. (可选)如果我们使用像 Elixir 这样的资产预编译器,我们将需要获取 npm 依赖项、重置权限并运行 gulp:

    @task('npm_install')
    cd {{ $release_dir }}/{{ $release }};
    sudo npm install;
    @endtask
    
    @task('update_permissions')
    cd {{ $release_dir }};
    sudo chgrp -R www-data {{ $release }};
    sudo chmod -R ug+rwx {{ $release }};
    @endtask
    
    @task('compile_assets')
    cd {{ $release_dir }}/{{ $release }};
    gulp --production;
    @endtask
    
  4. 更新符号链接

    @task('update_symlinks')
    ln -nfs {{ $root_dir  }}/.env {{ $release_dir }}/{{ $release }}/.env;
    ln -nfs {{ $release_dir }}/{{ $release }} {{ $app_dir }};
    
    sudo chgrp -h www-data {{ $app_dir }};
    sudo service php5-fpm restart;
    @endtask
    
  5. (可选)修剪旧的发布文件夹(30 天以上),这样我们就不会填满服务器。

    @task('prune_old')
    sudo find {{ $release_dir }} -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
    @endtask
    

注意:重新启动 php5-fpm 服务会清除缓存以确保遵循新的符号链接。

当我最初开始使用 Laravel 进行开发时,我发现找到部署脚本示例(如前所述)有些困难,因此希望这将有助于减轻一些搜索。

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 2016-09-06
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2016-08-06
    相关资源
    最近更新 更多