[英]Laravel deployment with capistrano cache files
我正在尝试将Laravel应用程序部署到带有Capistrano的Ubuntu服务器上时遇到问题。
我的部署目录是/ var / www / project_stage。 当我将项目部署到该目录时,一切正常。 我的项目变为现场,每一行代码都能正常工作。
但是,当我进行更改并部署同一项目的新版本时,不知何故(我猜)我的文件正在缓存而没有响应最新版本,他们仍在作为旧版本进行响应,而alredy被覆盖。
当我将项目部署到另一个文件夹(etc:/ 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 inherited from staging.rb lock "~> 3.10.1" set :application, "project_stage" set :repo_url, "MY REPO HERE" set :keep_releases, 10 set :laravel_dotenv_file, "./.env.staging" namespace :deploy do before :updated, :easy do on roles(:all) do |host| execute :chmod, "-R 777 #{deploy_path}/shared/storage/logs" execute :chmod, "-R 777 #{deploy_path}/shared/storage/framework" end end after :finished, :hard do on roles(:all) do |host| end end desc "Build" after :updated, :build do on roles(:web) do within release_path do execute :php, "artisan clear-compiled" execute :php, "artisan cache:clear" execute :php, "artisan view:clear" execute :php, "artisan route:cache" execute :php, "artisan config:cache" end end end end #end deploy namespace
我使用PHP7.0(带有unix套接字的FPM),Nginx,Laravel5,Capistrano3(带有capsitano / laravel gem),Ubuntu Server 16.4。
如果您使用OPcache并将opcache.validate_timestamps
设置为零,则可能会出现您所描述的问题。 将validate_timestamps设置为零,OPcache从不检查文件的较新版本。 这略微提高了性能,但这意味着您需要手动刷新缓存。
您可以通过两件事来解决问题:
opcache_reset()
来部署缓存。 请注意,因为您使用的是php-fpm,所以您应该能够从cli中刷新缓存。 如果您使用带有mod_php的Apache,则需要在Apache调用的脚本(通过HTTP请求)而不是cli中刷新缓存。 必须在运行应用程序的上下文中刷新缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.