Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

laravel5: chdir(): No such file or directory (errno 2)

Tags:

laravel-5

vps

I have a problem when deploy website build on laravel 5 into VPS server, but on local machine it work fine.

My page is http://easyway.vn/ current page display blank with error

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

When I run

php artisan serve --host=0.0.0.0

I have a error

[ErrorException]
chdir(): No such file or directory (errno 2)



Server Info

OS: Linux 2.6
Server version: Apache/2.2.29 (Unix)
PHP 5.4.41 (cli) (built: Jun 4 2015 13:27:02) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

Help me please!

like image 752
Terry To Avatar asked Jun 16 '15 16:06

Terry To


2 Answers

it means that your Laravel Application Can't Find the public folder.

I got it to work by

changing :

chdir($this->laravel->publicPath());

in :

vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php

To :

chdir('/');
like image 128
sam ben Avatar answered Oct 06 '22 19:10

sam ben


Renaming public folder name causes this issue.

Touching files under vendor directory is something you may never do.

Here is a working alternative way which I have tested and using in my active project.

Create app/Console/Commands/Serve.php files and set the content to this:

<?php

namespace App\Console\Commands;

use Exception;
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Process\PhpExecutableFinder;
use Symfony\Component\Process\ProcessUtils;

class Serve extends Command {
    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'serve';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Serve the application on the PHP development server';

    /**
     * Execute the console command.
     *
     * @return void
     *
     * @throws \Exception
     */
    public function fire() {
        chdir('/');

        $host = $this->input->getOption('host');

        $port = $this->input->getOption('port');

        $base = ProcessUtils::escapeArgument($this->laravel->basePath());

        $binary = ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false));

        $this->info("Laravel development server started on http://{$host}:{$port}/");

        if (defined('HHVM_VERSION')) {
            if (version_compare(HHVM_VERSION, '3.8.0') >= 0) {
                passthru("{$binary} -m server -v Server.Type=proxygen -v Server.SourceRoot={$base}/ -v Server.IP={$host} -v Server.Port={$port} -v Server.DefaultDocument=server.php -v Server.ErrorDocument404=server.php");
            } else {
                throw new Exception("HHVM's built-in server requires HHVM >= 3.8.0.");
            }
        } else {
            passthru("{$binary} -S {$host}:{$port} {$base}/server.php");
        }
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions() {
        return [
            ['host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on.', 'localhost'],

            ['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', 8000],
        ];
    }
}

Update the app/Console/Kernel.php file with this content:

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel {
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        // Commands\Inspire::class,
        Commands\Serve::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule) {
        // $schedule->command('inspire')
        //  ->hourly();
    }
}

That's all!

Now run your serve command:

$ php artisan serve

Server started:

Laravel development server started on http://localhost:8000/
like image 20
Sinan Eldem Avatar answered Oct 06 '22 21:10

Sinan Eldem