['optimize:clear', []], ['migrate', ['--force' => true]], ['optimize', []], ] as [$command, $parameters]) { $exitCode = Artisan::call($command, $parameters); $results[] = [ 'command' => 'php artisan '.$command, 'exit_code' => $exitCode, 'output' => trim(Artisan::output()), ]; if ($exitCode !== 0) { throw new \RuntimeException("فشل الأمر {$command} برمز {$exitCode}."); } } File::ensureDirectoryExists(dirname($lockPath)); File::put($lockPath, json_encode([ 'completed_at' => now()->toIso8601String(), 'app_url' => config('app.url'), ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); $locked = true; $success = 'اكتمل تحديث النظام وترحيل قاعدة البيانات وتحسين Laravel بنجاح.'; } catch (Throwable $exception) { report($exception); $error = $exception->getMessage(); } $checks = $this->checks(); } return view('deployment', compact('locked', 'checks', 'results', 'success', 'error')); } private function authorizeKey(Request $request): void { $configuredKey = (string) config('app.deployment_key', ''); $providedKey = (string) $request->input('key', $request->query('key', '')); abort_if($configuredKey === '' || ! hash_equals($configuredKey, $providedKey), 404); } private function checks(): array { $databasePath = config('database.default') === 'sqlite' ? (string) config('database.connections.sqlite.database') : 'قاعدة بيانات خارجية: '.config('database.default'); return [ 'إصدار PHP' => PHP_VERSION, 'بيئة التطبيق' => (string) config('app.env'), 'رابط التطبيق' => (string) config('app.url'), 'ملف .env' => File::exists(base_path('.env')) ? 'موجود' : 'غير موجود', 'نوع قاعدة البيانات' => (string) config('database.default'), 'مسار قاعدة البيانات' => $databasePath, 'قاعدة البيانات' => config('database.default') !== 'sqlite' || File::exists($databasePath) ? 'موجودة' : 'غير موجودة', 'مجلد storage' => is_writable(storage_path()) ? 'قابل للكتابة' : 'غير قابل للكتابة', 'مجلد bootstrap/cache' => is_writable(base_path('bootstrap/cache')) ? 'قابل للكتابة' : 'غير قابل للكتابة', ]; } private function prepareWritablePaths(): void { foreach ([storage_path(), base_path('bootstrap/cache'), database_path()] as $directory) { File::ensureDirectoryExists($directory, 0775, true); @chmod($directory, 0775); } $databasePath = (string) config('database.connections.sqlite.database'); if (config('database.default') === 'sqlite' && File::exists($databasePath)) { @chmod($databasePath, 0664); } } }
Invalid route action: [App\Http\Controllers\DeploymentController].
Illuminate\Routing\RouteAction::makeInvokable(string)Illuminate\Routing\RouteAction::makeInvokable(string)Illuminate\Routing\RouteAction::parse(string, array)Illuminate\Routing\Route->parseAction(array)Illuminate\Routing\Route->__construct(array, string, array)Illuminate\Routing\Router->newRoute(array, string, array)Illuminate\Routing\Router->createRoute(array, string, array)Illuminate\Routing\Router->addRoute(array, string, string)Illuminate\Routing\Router->match(array, string, string)Illuminate\Support\Facades\Facade::__callStatic(string, array)10use App\Http\Controllers\ReportController;11use Illuminate\Support\Facades\Route;12use App\Http\Controllers\DeploymentController;131415Route::match(['get', 'post'], '/system/deploy', DeploymentController::class)16 ->middleware('throttle:10,1')17 ->name('system.deploy');18 19Route::middleware('guest')->group(function () {20 Route::get('/login', [AuthController::class, 'create'])->name('login');21 Route::post('/login', [AuthController::class, 'store'])->name('login.store');22});2324Route::middleware('auth')->group(function () {25 Route::get('/', [DashboardController::class, 'index'])->name('dashboard');26 Route::resource('goals', GoalController::class);27require(string)Illuminate\Routing\RouteFileRegistrar->register(string)Illuminate\Routing\Router->loadRoutes(string)Illuminate\Routing\Router->group(array, string)Illuminate\Routing\RouteRegistrar->group(string)Illuminate\Foundation\Configuration\ApplicationBuilder->Illuminate\Foundation\Configuration\{closure}()Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()Illuminate\Container\Util::unwrapIfClosure(object(Closure))Illuminate\Container\BoundMethod::callBoundMethod(object(Illuminate\Foundation\Application), object(Closure), object(Closure))Illuminate\Container\BoundMethod::call(object(Illuminate\Foundation\Application), object(Closure), array, null)Illuminate\Container\Container->call(object(Closure))Illuminate\Foundation\Support\Providers\RouteServiceProvider->loadRoutes()Illuminate\Foundation\Support\Providers\RouteServiceProvider->Illuminate\Foundation\Support\Providers\{closure}()Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()Illuminate\Container\Util::unwrapIfClosure(object(Closure))Illuminate\Container\BoundMethod::callBoundMethod(object(Illuminate\Foundation\Application), object(Closure), object(Closure))Illuminate\Container\BoundMethod::call(object(Illuminate\Foundation\Application), object(Closure), array, null)Illuminate\Container\Container->call(object(Closure))Illuminate\Support\ServiceProvider->callBootedCallbacks()Illuminate\Foundation\Application->bootProvider(object(Illuminate\Foundation\Support\Providers\RouteServiceProvider))array_walk(array, object(Closure))Illuminate\Foundation\Application->boot()Illuminate\Foundation\Bootstrap\BootProviders->bootstrap(object(Illuminate\Foundation\Application))Illuminate\Foundation\Application->bootstrapWith(array)Illuminate\Foundation\Http\Kernel->bootstrap()Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(object(Illuminate\Http\Request))Illuminate\Foundation\Http\Kernel->handle(object(Illuminate\Http\Request))Illuminate\Foundation\Application->handleRequest(object(Illuminate\Http\Request))1516// Bootstrap Laravel and handle the request...17/** @var Application $app */18$app = require_once __DIR__.'/../bootstrap/app.php';1920$app->handleRequest(Request::capture());21{
"C": "D",
"O": "A"
}