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

后端 未结 9 1123
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-01 18:37

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

相关标签:
9条回答
  • 2020-12-01 19:19

    remember when you run in production the path of public change to public_html so to run again in localhost I changed into app/Providers/AppServiceProvider.php

    this:

    public function register()
        {
           $this->app->bind('path.public',function(){return'/public';});
        }
    

    to this:

    public function register()
        {
           // commented this line
        }
    

    Also after changed .env enviroment and in server.php and index.php

    0 讨论(0)
  • 2020-12-01 19:20

    go to server.php in root folder and rename any public to any name you have

    0 讨论(0)
  • 2020-12-01 19:22

    I know you asked this question a long time ago but for those who seek the easiest and efficient way to solve this problem:

    This error means laravel can't find the public folder.You must add this piece of code in the register method of Providers/AppServiceProvider.php:

    public function register()
    {
        $this->app->bind('path.public', function() {
           return base_path('PATH TO PUBLIC FOLDER');
        });
    }
    

    Example with public_html

    In your case,, the path for public HTML will be:

    public function register()
    {
        $this->app->bind('path.public', function() {
           return base_path('public_html');
        });
    }
    

    This way Laravel knows where to look to find the public folder path.

    0 讨论(0)
  • 2020-12-01 19:27

    Usually when this type of error occurs it means Laravel is Looking for a public folder and it cannot be found. This depends on how you have configured your application and using php artisan serve --host=0.0.0.0 will not work in this case. The best way to handle this is to place you application in your server(htdocs) and access it in your url.

    The vendor directory contains your Composer dependencies. Visit Laravel Documentation for details. Never edit anything in vendor because it may cause problem when you do composer update.

    0 讨论(0)
  • 2020-12-01 19:33

    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/
    
    0 讨论(0)
  • 2020-12-01 19:34

    Change

    chdir(public_path());

    To

    chdir('/');

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

    0 讨论(0)
提交回复
热议问题