我在尝试使用 Capistrano 将 Laravel 应用程序部署到 Ubuntu 服务器时遇到问题。
我的部署目录是/var/www/project_stage。当我将项目部署到该目录时,一切正常。我的项目上线了,每一行代码都能正常工作。
但是当我进行更改并部署同一项目的新版本时,不知何故(我猜)我的文件被缓存并且没有响应最新版本,它们仍然作为已经被覆盖的旧版本响应。
当我将项目部署到不同的文件夹(等:/var/www/project_stage2 而不是/var/www/project_stage)并更改我的 Nginx 配置以从该文件夹提供服务时,它会再次正常工作。但不在第二个部署到同一目录中。所以我可以说我每次都可以部署到不同的目录,但我不能两次部署到同一个目录。它总是响应第一次部署。
这是我尝试过的:
正确的文件夹,它有。
他们是。文件在新部署时绝对更改。
已。
php artisan cache:clear
, route:clear
,view:clear
, config:cache
命令,我运行 composer
dump-autoload
也。没有任何效果。 sendfile
off
的参数并重新启动,没有结果。
我的情况。
这是我的 deploy.rb:
#deploy_path 从 staging.rb 继承
锁定“~> 3.10.1”
设置:应用程序,“project_stage”
设置:repo_url,“我的 repo 在这里”
设置: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 之后
在角色(:web)上做
在 release_path 内做
执行:php,“工匠清晰编译”
执行:php,“工匠缓存:清除”
执行:php,“工匠 View :清除”
执行:php,“工匠路线:缓存”
执行:php,“工匠配置:缓存”
结尾
结尾
结尾
end #end 部署命名空间
我正在使用 PHP7.0(带有 unix 套接字的 FPM)、Nginx、Laravel5、Capistrano3(带有 capsitano/laravel gem)、Ubuntu Server 16.4。
最佳答案
如果您使用 OPcache,可能会出现您所描述的问题。与 opcache.validate_timestamps
设置为零。当 validate_timestamps 设置为零时,OPcache 从不检查文件的更新版本。这会稍微提高性能,但这意味着您需要手动刷新缓存。
您可以做两件事来解决问题:
opcache_reset()
在 PHP 脚本中。 请注意,因为您使用的是 php-fpm,所以您应该能够从 cli 刷新缓存。如果您将 Apache 与 mod_php 一起使用,则需要在由 Apache(通过 HTTP 请求)而不是从 cli 调用的脚本中刷新缓存。缓存必须在应用程序运行的上下文中刷新。
关于使用 capistrano 缓存文件部署 Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48369324/