【发布时间】:2017-07-07 00:26:42
【问题描述】:
我试图在控制器中调用一个非常耗时的 Artisan 命令(它在 20-90 秒内执行),但我有两个问题。首先,该命令似乎根本没有执行(如果我返回输出,它只会返回“0”)。
其次另一部分(返回文件)不等待命令执行(但可以与第一部分相关)。这是我的代码:
public function returnZip()
{
// just a failsafe, in case if scheduled command did not created the file yet
if( ! file_exists( storage_path( '/app/exports/' . date('Y_m_d') . '.zip' ) ) ){
Artisan::call('maximus:export');
}
return response()->file( storage_path( '/app/exports/' . date('Y_m_d') . '.zip' ) );
}
如何从路由/控制器正确执行 Artisan 命令并等待它完成任务?
编辑
我尝试再调试一下这个问题,发现从路由/控制器调用该命令时根本没有执行。
试过这个:
Route::get('/test', function(){
Artisan::call('maximus:export');
return ['ok'];
});
我的命令应该是创建一个文件:
public function handle()
{
exec('touch /some/path/storage/app/exports/test');
}
当我在终端中运行此命令时,正在创建文件,但是当我点击路由时,它不是。有任何想法吗?
【问题讨论】: