2016-01-30 3 views
8

Сегодня вечером я попытался запустить composer install, и все зависимости установлены правильно, а затем композитор побежал php artisan clear compiled, и я столкнулся с проблемой.Laravel Permission Denied

Вот ошибка вернулся:

> php artisan clear-compiled 


    [ErrorException]                           
    file_put_contents(/srv/something/site/bootstrap/cache/services.php): failed to open stream: No such file or directory 


Script php artisan clear-compiled handling the post-install-cmd event returned with an error 



    [RuntimeException] 
    Error Output:  



install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-plugins] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--ignore-platform-reqs] [--] [<packages>]... 

Естественно, я гугле его и нашел все на laracast forums говоря, чтобы сделать каталог, который пропал без вести, так что я сделал, и команда снова бежал хорошо. Когда я пошел на любую страницу, я получил это: file_put_contents(/differentNameDependingOnPageButAlwaysRandomLettersAndNumbers.php): failed to open stream: Permission denied

Например вот отслеживающий для страницы входа:

ErrorException in Filesystem.php line 81: 
file_put_contents(/8ff8cea6e3bb10ecec87b9d62c64f9768c4c4ab1.php): failed to open stream: Permission denied 
in Filesystem.php line 81 
at HandleExceptions->handleError('2', 'file_put_contents(/8ff8cea6e3bb10ecec87b9d62c64f9768c4c4ab1.php): failed to open stream: Permission denied', '/srv/something/site/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php', '81', array('path' => '/8ff8cea6e3bb10ecec87b9d62c64f9768c4c4ab1.php', 'contents' => '<?php $__env->startSection('title'); ?> Admin Login <?php $__env->stopSection(); ?> <?php $__env->startSection('form'); ?> <form class="form-horizontal" method="POST" action = "login"> <?php echo e($error); ?><?php /*TODO this doesn't show up now, when you do login make it show up*/ ?> <fieldset> <!-- Form Name --> <h1 class="section-heading" style="text-align: center;">Login</h1> <!-- Text input--> <div class="form-group"> <label class="col-md-4 control-label" for="email">Email</label> <div class="col-md-4"> <input id="email" name="email" type="email" id = "email" placeholder="[email protected]" class="form-control input-md" required=""> </div> </div> <!-- Password input--> <div class="form-group"> <label class="col-md-4 control-label" for="password">Password</label> <div class="col-md-4"> <input id="password" name="password" type="password" placeholder="********" class="form-control input-md" required=""> </div> </div> <!-- Button --> <div class="form-group"> <label class="col-md-4 control-label" for="Submit"></label> <div class="col-md-4"> <button id="submit" name="submit" class="btn btn-primary">Submit</button> </div> </fieldset> </form> <?php $__env->stopSection(); ?> <?php $__env->startSection('message'); ?> <p class="text-muted" style="text-align:center">Don't have an account yet? Click <a href="../register">here</a> to register.</p> <?php $__env->stopSection(); ?> <?php echo $__env->make('auth.partials.master', array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>', 'lock' => false)) 
at file_put_contents('/8ff8cea6e3bb10ecec87b9d62c64f9768c4c4ab1.php', '<?php $__env->startSection('title'); ?> Admin Login <?php $__env->stopSection(); ?> <?php $__env->startSection('form'); ?> <form class="form-horizontal" method="POST" action = "login"> <?php echo e($error); ?><?php /*TODO this doesn't show up now, when you do login make it show up*/ ?> <fieldset> <!-- Form Name --> <h1 class="section-heading" style="text-align: center;">Login</h1> <!-- Text input--> <div class="form-group"> <label class="col-md-4 control-label" for="email">Email</label> <div class="col-md-4"> <input id="email" name="email" type="email" id = "email" placeholder="[email protected]" class="form-control input-md" required=""> </div> </div> <!-- Password input--> <div class="form-group"> <label class="col-md-4 control-label" for="password">Password</label> <div class="col-md-4"> <input id="password" name="password" type="password" placeholder="********" class="form-control input-md" required=""> </div> </div> <!-- Button --> <div class="form-group"> <label class="col-md-4 control-label" for="Submit"></label> <div class="col-md-4"> <button id="submit" name="submit" class="btn btn-primary">Submit</button> </div> </fieldset> </form> <?php $__env->stopSection(); ?> <?php $__env->startSection('message'); ?> <p class="text-muted" style="text-align:center">Don't have an account yet? Click <a href="../register">here</a> to register.</p> <?php $__env->stopSection(); ?> <?php echo $__env->make('auth.partials.master', array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>', '0') in Filesystem.php line 81 
at Filesystem->put('/8ff8cea6e3bb10ecec87b9d62c64f9768c4c4ab1.php', '<?php $__env->startSection('title'); ?> Admin Login <?php $__env->stopSection(); ?> <?php $__env->startSection('form'); ?> <form class="form-horizontal" method="POST" action = "login"> <?php echo e($error); ?><?php /*TODO this doesn't show up now, when you do login make it show up*/ ?> <fieldset> <!-- Form Name --> <h1 class="section-heading" style="text-align: center;">Login</h1> <!-- Text input--> <div class="form-group"> <label class="col-md-4 control-label" for="email">Email</label> <div class="col-md-4"> <input id="email" name="email" type="email" id = "email" placeholder="[email protected]" class="form-control input-md" required=""> </div> </div> <!-- Password input--> <div class="form-group"> <label class="col-md-4 control-label" for="password">Password</label> <div class="col-md-4"> <input id="password" name="password" type="password" placeholder="********" class="form-control input-md" required=""> </div> </div> <!-- Button --> <div class="form-group"> <label class="col-md-4 control-label" for="Submit"></label> <div class="col-md-4"> <button id="submit" name="submit" class="btn btn-primary">Submit</button> </div> </fieldset> </form> <?php $__env->stopSection(); ?> <?php $__env->startSection('message'); ?> <p class="text-muted" style="text-align:center">Don't have an account yet? Click <a href="../register">here</a> to register.</p> <?php $__env->stopSection(); ?> <?php echo $__env->make('auth.partials.master', array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>') in BladeCompiler.php line 102 
at BladeCompiler->compile('/srv/something/site/resources/views/auth/login.blade.php') in CompilerEngine.php line 51 
at CompilerEngine->get('/srv/something/site/resources/views/auth/login.blade.php', array('__env' => object(Factory), 'app' => object(Application), 'error' => '')) in View.php line 135 
at View->getContents() in View.php line 106 
at View->renderContents() in View.php line 80 
at View->render() in Response.php line 53 
at Response->setContent(object(View)) in Response.php line 197 
at Response->__construct(object(View)) in Router.php line 1030 
at Router->prepareResponse(object(Request), object(View)) in ControllerDispatcher.php line 95 
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96 
at ControllerDispatcher->callWithinStack(object(authController), object(Route), object(Request), 'getAdminLogin') in ControllerDispatcher.php line 54 
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\authController', 'getAdminLogin') in Route.php line 174 
at Route->runController(object(Request)) in Route.php line 140 
at Route->run(object(Request)) in Router.php line 703 
at Router->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Router.php line 705 
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 678 
at Router->dispatchToRoute(object(Request)) in Router.php line 654 
at Router->dispatch(object(Request)) in Kernel.php line 246 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Kernel.php line 132 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99 
at Kernel->handle(object(Request)) in index.php line 54 

До сих пор, чтобы попытаться исправить это я сделал следующее:

  1. проверяемых разрешения, все изменились к 777 и принадлежать www-data
  2. Попробованного клонированию пустого хранилища без файла поставщика, но безрезультатно, того же ошибка на композитору стойло
  3. Ран php artisan cache:clear
  4. Ран php artisan clear-compiled
  5. Ран php artisan dump-autoload
  6. Модифицированный site/config/view.php на irc предложение, и изменил compiled' => realpath(storage_path().'/framework/views') к 'compiled' => storage_path('framework/views'),, которые дали другую ошибку: file_put_contents(/srv/something/site/storage/framework/views/8ff8cea6e3bb10ecec87b9d62c64f9768c4c4ab1.php): failed to open stream: No such file or directory (вероятно, потому, что он не должен быть там, но кто эта информация может быть полезна.)

Все это безрезультатно. Странная часть этого вопроса, казалось бы, появилась из ниоткуда. Спасибо за помощь!

+2

Кажется, что это довольно ясно проблема с разрешениями. Я знаю, вы сказали, что вы взорвали «777», но где вы это сделали? Я бы попробовал рекурсивный 777 в каталоге хранилища: 'chmod -R 777 storage' – jpschroeder

+0

@jpschroeder Я пробовал это безрезультатно, вот ls -l моего корня laravel и каталога каталога хранения: https: // git.io/vzxAE –

+2

Ваш ls -l показывает, что весь каталог принадлежит root, а каталог хранилища не доступен для записи, поэтому я не думаю, что вы правильно меняете разрешения. 'cd {laravel_root}' и запустить 'sudo chown -R www-data: www-data.' 'sudo chmod -R 777 storage' – judereid

ответ

22

Получается, что мне не хватало представления каталогов в laravel_root/storage/. Для того, чтобы исправить это, все, что я должен был сделать:

  1. cd {laravel_root}/storage
  2. mkdir -pv framework/views app framework/sessions framework/cache
  3. cd ..
  4. chmod 777 -R storage
  5. chown -R www-data:www-data storage

После этого, после перезагрузки, вопрос был исправлен. Благодаря Someguy123 от #laravel на freenode для исправления этой проблемы!

+1

Рад, что вы смогли запустить его. Странно, что вам приходилось создавать эти каталоги вручную, поскольку они являются частью оригинального [laravel repo] (https://github.com/laravel/laravel/tree/master/storage/framework). При использовании команды 'composer create-project'? – jpschroeder

+0

@jpschroeder yep, проблема была в git, случайно удалив файлы. –

+2

Настройка 777 - это плохая привычка, подумайте о настройке группы для пользователя веб-сервера и дайте разрешение только этой группе для записи в этой папке. Проверьте этот ответ: http://stackoverflow.com/a/37266353/987864 – Daan

0

Я имел те же problem.This был после создания нового проекта с помощью Git clone.Turns, что это было потому, что я имел/хранение/каркасные/Views/на gitignore file.i просто mkdir storage/framework/views/ и sudo chown -R www-data:www-data storage и все было в порядке снова. Надеюсь, это поможет кому-то.

0

Я обнаружил, что, когда вы идете в gitignore.io и тянуть в Laravel вы получите это по умолчанию

# Laravel 4 конкретных начальной загрузки/сост.PHP приложение/хранение/

# Laravel 5 & Lumen конкретных начальной загрузки/кэша/ .env. *. PHP .env.php .env

Я просто просто место #bootstrap/cache в Laravel 5 раздел так:

Laravel 5 & Lumen конкретных

# начальной загрузки/кэша/ .env. *. Php .env.php .env

Надежды, которые помогают кому-то.

+0

Вам нужно сначала создать папки, но –

0

Если у вас есть разрешение 777 для папки Laravel Application и по-прежнему получают эту ошибку, это связано с тем, что Selyux заблокировал ее. Папка приложения может быть разблокирована с помощью команды ниже

su -c "chcon -R -h -t httpd_sys_script_rw_t /var/www/laravel-folder" 
+0

Если у вас есть SElinux (check /var/log/audit/audit.log), и вы пытаетесь включить php -файлы за пределами корневой папки http, см. https://stackoverflow.com/questions/15395845/tell-selinux-to-give-apache-execute-access-to-php-files-outside-document-root –