微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用capistrano缓存文件进行Laravel部署

我正在尝试将Laravel应用程序部署到带有Capistrano的ubuntu服务器上时遇到问题.

我的部署目录是/ var / www / project_stage.当我将项目部署到该目录时,一切正常.我的项目变为现场,每一行代码都能正常工作.

但是,当我进行更改并部署同一项目的新版本时,不知何故(我猜)我的文件正在缓存而没有响应最新版本,他们仍在作为旧版本进行响应,而alredy被覆盖.

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

这是我尝试过的:

>我检查了Capistrano的当前目录是否链接
正确的文件夹,它有.
>我检查了我所做的更改是否在新部署中可见,哪个
他们是.新部署时绝对更改文件.
>我检查了Nginx是否正在寻找正确的发布目录,它
具有.
>我试图运行PHP artisan cache:clear,route:clear,
view:clear,config:cache命令,我运行composer
dump-autoload也是.没有任何效果.
>我将Nginx的sendfile参数更改为off并重新启动,no
结果.
>我在this问题上阅读了类似的问题,但它没有奏效
我的情况.

这是我的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从不检查文件的较新版本.这略微提高了性能,但这意味着您需要手动刷新缓存.

您可以通过两件事来解决问题:

>在PHP.ini中将opcache.validate_timestamps设置为1.这将导致性能降低.
通过在PHP脚本中调用opcache_reset(),在部署新文件后,在部署期间刷新缓存.

请注意,因为您使用的是PHP-fpm,所以您应该能够从cli中刷新缓存.如果您使用带有mod_PHP的Apache,则需要在Apache调用的脚本(通过HTTP请求)而不是cli中刷新缓存.必须在运行应用程序的上下文中刷新缓存.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐