我们正在使用这个库laravel-snappy在队列中生成PDF。
该库用于在执行脚本后删除所有临时文件。这是由于Knp\Snappy\AbstractGenerator类中的以下代码造成的:
public function __destruct()
{
$this->removeTemporaryFiles();
}参考- https://github.com/KnpLabs/snappy/blob/master/src/Knp/Snappy/AbstractGenerator.php#L57
因为我们在队列作业和Laravel中使用它,一旦queue:work命令启动,它将继续运行,直到手动停止或关闭终端。
因此,为了清理tmp文件,我每次都必须重新启动队列工作程序。
除了这个,还有其他选择吗?
注意--在laravel-snappy的包装器中,类Knp\Snappy\AbstractGenerator的实例是protected。所以我不能直接调用它的方法。
参考- https://github.com/barryvdh/laravel-snappy/blob/master/src/PdfWrapper.php#L20
发布于 2017-11-09 15:46:24
Reff:- Read this doc
主控引擎配置
Supervisor是Linux操作系统的进程监视器,如果queue:listen或queue:work命令失败,它会自动重新启动它们。要在Ubuntu上安装Supervisor,可以使用以下命令:
sudo apt-get install supervisor主管配置文件通常存储在/etc/ Supervisor /conf.d目录中。在此目录中,您可以创建任意数量的配置文件,以指示主管应如何监视您的进程。例如,让我们创建一个laravel-worker.conf文件来启动和监视queue:work process:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log在本例中,numprocs指令将指示Supervisor运行8个queue:work进程并监视所有进程,如果失败则自动重新启动它们。当然,您应该更改命令指令的queue:work sqs部分,以反映您选择的队列驱动程序。
创建配置文件后,您可以使用以下命令更新Supervisor配置并启动进程:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*发布于 2017-11-09 17:36:48
我不使用这个库,但据我所知,有一个Generator类可以用来生成PDF。
一旦这个类被释放,它就会删除所有的tmp文件,因为会调用析构函数。
这里有一个对
Knp\Snappy\AbstractGenerator像$generator = new SomeConcreteGenerator();一样
它似乎由包装器持有,所以您不能将其设置为null。
您可能会得到包含混凝土生成器的包装器
$pdf = App::make('snappy.pdf.wrapper');因此您可以通过$pdf = null释放包装器,然后创建一个新的包装器。你必须在创建了1000个Pdfs之后才能这样做。
这种方法的问题是,服务通过$this->app->singleton(...)作为单例绑定到DIC。See source code。
所以它保留了我们想要释放的引用。
试一试,通过将它们的源代码修改为$this->app->bind(...)而不是$this->app->singleton(...)来执行常规绑定。
(您不应该调用__destruct(),因为您基本上销毁了DIC所拥有的对象。)
https://stackoverflow.com/questions/47196237
复制相似问题