【问题标题】:Laravel deployment with capistrano cache files使用 capistrano 缓存文件部署 Laravel
【发布时间】:2018-06-30 08:39:20
【问题描述】:

我在尝试使用 Capistrano 将 Laravel 应用程序部署到 Ubuntu 服务器上时遇到问题。

我的部署目录是/var/www/project_stage。当我将项目部署到该目录时,一切正常。我的项目上线了,每一行代码都可以正常工作。

但是当我进行更改并部署同一项目的新版本时,不知何故(我猜)我的文件被缓存并且没有响应最新版本,它们仍然响应旧版本已经被覆盖.

当我将项目部署到不同的文件夹(例如:/var/www/project_stage2 而不是 /var/www/project_stage)并将我的 Nginx 配置更改为从该文件夹提供服务时,它会再次正常工作。但不是在第二次部署到同一目录中。所以我可以说我每次都可以部署到不同的目录,但我不能两次部署到同一个目录。它总是在首次部署时响应。

这是我尝试过的:

  • 我检查了 Capistrano 的当前目录是否链接到 正确的文件夹,它有。
  • 我检查了我所做的更改是否在新部署中可见,这 他们是。文件在新部署时完全更改。
  • 我检查了 Nginx 是否正在寻找正确的发布目录,它 有。
  • 我尝试运行php artisan cache:clearroute:clearview:clear, config:cache 命令,我也运行composer dump-autoload。没有任何效果。
  • 我把Nginx的sendfile参数改成off重启了,不行 结果。
  • 我在this 问题上阅读了类似的问题,但它没有解决问题 我的情况。

这是我的 deploy.rb:

#deploy_path 继承自 staging.rb 锁定“~> 3.10.1” 设置:应用程序,“project_stage” 设置:repo_url,“我的回购协议” 设置:keep_releases,10 设置:laravel_dotenv_file,“./.env.staging” 命名空间:部署做 之前 :updated, :easy do 在角色(:all) 上做 |host| 执行:chmod,“-R 777 #{deploy_path}/shared/storage/logs” 执行:chmod,“-R 777 #{deploy_path}/shared/storage/framework” 结尾 结尾 :finished, :hard do 之后 在角色(:all) 上做 |host| 结尾 结尾 描述“构建” 在 :updated, :build 之后 在角色(:网络)上做 在 release_path 中做 执行 :php, "artisan clear-compiled" 执行:php,“工匠缓存:清除” 执行:php,“工匠视图:清除” 执行:php,“工匠路线:缓存” 执行:php,“工匠配置:缓存” 结尾 结尾 结尾 end #end 部署命名空间

我正在使用 PHP7.0(带有 unix 套接字的 FPM)、Nginx、Laravel5、Capistrano3(带有 capsitano/laravel gem)、Ubuntu Server 16.4。

【问题讨论】:

  • 您是否在使用将opcache.validate_timestamps 设置为零的操作码缓存?

标签: laravel caching nginx deployment capistrano


【解决方案1】:

如果您使用OPcache 并将opcache.validate_timestamps 设置为零,则可能会出现您所描述的问题。将 validate_timestamps 设置为零时,OPcache 永远不会检查文件的更新版本。这会稍微提高性能,但这意味着您需要手动刷新缓存。

你可以做两件事来解决这个问题:

  1. 在 php.ini 中将 opcache.validate_timestamps 设置为 1。这会导致性能略有下降。
  2. ...或在部署期间刷新缓存,在部署新文件后,通过在 PHP 脚本中调用 opcache_reset()

请注意,由于您使用的是 php-fpm,因此您应该能够从 cli 中刷新缓存。如果您将 Apache 与 mod_php 一起使用,则需要在 Apache(通过 HTTP 请求)调用的脚本中刷新缓存,而不是从 cli。缓存必须在应用程序运行的上下文中刷新。

【讨论】:

  • 感谢您的回答。我检查了我的 php 设置,发现 opcache.validate_timestamps 设置为 On。 opcache.enabled 确实是 On 。我应该将其中任何一个设置为关闭吗?顺便说一句,我运行 opcache_reset();手动从脚本和 BOOM 中,我的提交是在线的。楼主你发现问题了!谢谢。
  • @EnesApaydın 我建议在生产中保留opcache.enabled。使用 opcache 可以显着提高性能。
猜你喜欢
  • 2016-06-02
  • 2014-04-04
  • 1970-01-01
  • 2020-01-15
  • 2021-10-29
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多