问题
I duplicated a working laravel app and renamed it to use for another app. I deleted the vendor folder and run the following commands again:
composer self-update
composer-update
npm install
bower install
I configured my routes and everything properly however now when I try to run my app in my browser I get the following errors:
InvalidArgumentException in Compiler.php line 36: Please provide a valid cache path.
ErrorException in Filesystem.php line 111: file_put_contents(F:\www\example\app\storage\framework/sessions/edf262ee7a2084a923bb967b938f54cb19f6b37d): failed to open stream: No such file or directory
I have never had this issue before, I do not know what is causing it neither do I know how to fix it, I have googled online for a solution but have found none so far.
回答1:
Try the following:
create these folders under storage/framework:
sessionsviewscache
Now it should work
回答2:
Try this:
php artisan cache:clearphp artisan config:clearphp artisan view:clear
回答3:
So apparently what happened was when I was duplicating my project the framework folder inside my storage folder was not copied to the new directory, this cause my error.
回答4:
You can edit your readme.md with instructions to install your laravel app in other environment like this:
## Create folders
```
#!terminal
cp .env.example .env && mkdir bootstrap/cache storage storage/framework && cd storage/framework && mkdir sessions views cache
```
## Folder permissions
```
#!terminal
sudo chown :www-data app storage bootstrap -R
sudo chmod 775 app storage bootstrap -R
```
## Install dependencies
```
#!terminal
composer install
```
回答5:
The cause of this error can be traced from Illuminate\View\Compilers\Compiler.php
public function __construct(Filesystem $files, $cachePath)
{
if (! $cachePath) {
throw new InvalidArgumentException('Please provide a valid cache path.');
}
$this->files = $files;
$this->cachePath = $cachePath;
}
The constructor is invoked by BladeCompiler in Illuminate\View\ViewServiceProvider
/**
* Register the Blade engine implementation.
*
* @param \Illuminate\View\Engines\EngineResolver $resolver
* @return void
*/
public function registerBladeEngine($resolver)
{
// The Compiler engine requires an instance of the CompilerInterface, which in
// this case will be the Blade compiler, so we'll first create the compiler
// instance to pass into the engine so it can compile the views properly.
$this->app->singleton('blade.compiler', function () {
return new BladeCompiler(
$this->app['files'], $this->app['config']['view.compiled']
);
});
$resolver->register('blade', function () {
return new CompilerEngine($this->app['blade.compiler']);
});
}
So, tracing back further, the following code:
$this->app['config']['view.compiled']
is generally located in your /config/view.php, if you use the standard laravel structure.
<?php
return [
/*
|--------------------------------------------------------------------------
| View Storage Paths
|--------------------------------------------------------------------------
|
| Most templating systems load templates from disk. Here you may specify
| an array of paths that should be checked for your views. Of course
| the usual Laravel view path has already been registered for you.
|
*/
'paths' => [
resource_path('views'),
],
/*
|--------------------------------------------------------------------------
| Compiled View Path
|--------------------------------------------------------------------------
|
| This option determines where all the compiled Blade templates will be
| stored for your application. Typically, this is within the storage
| directory. However, as usual, you are free to change this value.
|
*/
'compiled' => realpath(storage_path('framework/views')),
];
realpath(...) returns false, if the path does not exist. Thus, invoking
'Please provide a valid cache path.' error.
Therefore, to get rid of this error, what you can do is to ensure that
storage_path('framework/views')
or
/storage/framework/views
exists :)
回答6:
Try the following:
create these folders under storage/framework:
- sessions
- views
- cache/data
if still it does not work then try
php artisan cache:clear
if get an error of not able to clear cache. Make sure to create a folder data in cache/data
回答7:
I solved this problem by adding this line in my index.php:
$app['config']['view.compiled'] = "storage/framework/cache";
回答8:
Issue on my side(while deploying on localhost): there was views folder missing.. so if you have don't have the framework folder the you 'll need to add folders. but if already framework folder exist then make sure all above folders i.e 1. cache 2. session 3. views
exists in your framework directory.
回答9:
Your storage directory may be missing, or one of its sub-directories. The storage directory must have all the sub-directories that shipped with the Laravel installation.
来源:https://stackoverflow.com/questions/38483837/please-provide-a-valid-cache-path