可以在生产 laravel 网站上运行 php artisan :clear 命令吗? [关闭]

Posted

技术标签:

【中文标题】可以在生产 laravel 网站上运行 php artisan :clear 命令吗? [关闭]【英文标题】:Is it okay to run php artisan :clear commands on a production laravel website? [closed] 【发布时间】:2020-09-04 19:46:17 【问题描述】:

我在 DigitalOcean nginx 服务器上托管了一个生产 Laravel 网站,每次我 git push 新更新时,我总是运行以下命令:

php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear

composer dump-autoload

这是一种好的做法,还是在我的服务器上运行这些命令会导致问题?

【问题讨论】:

为什么会导致任何问题?你见过吗? 仅仅因为我没有“看到”任何问题,并不意味着没有。 【参考方案1】:

除了cache 之外的所有clears 都可以成为部署脚本的一部分。

但在生产环境中运行 php artisan cache:clear 风险极大,并会导致意外结果,例如丢失所有关键数据。

假设您的缓存驱动程序、队列驱动程序、会话驱动程序是redis,它们都共享同一个 redis 实例(同一个主机)。当你执行cache:clear时,它会执行下面的方法

/**
 * Remove all items from the cache.
 *
 * @return bool
 */
public function flush()

    $this->connection()->flushdb();

    return true;

它的作用是执行redis的flushdb命令。如果它们在同一个数据库中,它将刷新所有用户的会话、所有排队的作业、所有缓存的项目、所有与广播相关的代码。这是method

删除当前选定数据库的所有键。这个命令永远不会失败。

编辑:如果他们使用相同的redis驱动程序+相同的主机但不同的数据库,那么这可能不会导致副作用问题,但需要手动配置为不同的组件设置不同的数据库。

【讨论】:

运行 composer dump-autoload 怎么样? 它可以/应该是您的部署脚本的一部分。转储自动加载没有什么害处。 @JakeScervino【参考方案2】:

我同意@Ersoy 的回答,但只是为了添加一些东西

我在推送时运行这些命令,而不是使用 clear,我重新缓存了配置和路由。 请记住,该 route:cache 并不适用于所有可能的路由,请参阅 laravel 文档。

php artisan config:cache
php artisan route:cache
php artisan view:clear

composer install --no-dev

【讨论】:

运行 :cache 和 :clear 有什么区别? clear 擦除数据,缓存,存储数据的编译版本,以提高速度,尽管我主要使用 config:cache 进行共享托管,因为所有站点共享相同的环境 laravel.com/docs/7.x/configuration#configuration-caching

以上是关于可以在生产 laravel 网站上运行 php artisan :clear 命令吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在外部 php 网站上获取 laravel 当前用户

从php laravel禁用memcached

Laravel 身份验证过滤器在生产服务器上失败

Laravel 排队作业的问题。开发和生产的奇怪行为不同

Laravel 生产,CORS 没有“访问控制允许来源”标题

带有 laravel 的 Paypal PHP SDK。在生产模式下加载配置端点时出现问题