Laravel在作曲家更新期间显示维护模式

时间:2016-02-14 21:00:12

标签: php laravel-5

我有一个与这个未答复的问题极为相似的问题:laravel 5 maintenance page broken during composer update

我是Laravel的新手(使用5.2版),我正在尝试解决部署过程。从我收集的内容来看,我想要使用的工作流程(当然,我在开发服务器上进行了全面测试并进行了全面测试)是将生产站点置于维护模式,通过git部署更改,运行composer /工匠任务(composer updatephp artisan migrate等)然后让生产站点退出维护模式。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

  • (可选)已安装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
    
  6. 注意:重新启动php5-fpm服务会清除缓存,以确保遵循新的符号链接。

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