web-dev-qa-db-ja.com

有効なキャッシュパスを入力してください

作業中のlaravelアプリを複製し、別のアプリで使用するように名前を変更しました。ベンダーフォルダを削除して、次のコマンドをもう一度実行しました。

composer self-update

composer-update

npm install

bower install

私は自分のブラウザで自分のアプリを実行しようとすると、今私は自分のルートとすべてを正しく設定しました私は次のエラーが出ます:

36行目のCompiler.phpのInvalidArgumentException:有効なキャッシュパスを指定してください。

Filesystem.php 111行目のErrorException:file_put_contents(F:¥www¥example¥app¥storage¥framework/sessions/edf262ee7a2084a923bb967b938f54cb19f6b37d):ストリームが開けませんでした:そのようなファイルまたはディレクトリはありません

私は前にこの問題を抱えたことがない、私はそれが何を引き起こしているのか私には解決方法をわからない。

95
user3718908

だから私のプロジェクトを複製していたとき、どうやら私のストレージフォルダ内のフレームワークフォルダが新しいディレクトリにコピーされていなかったのです。これが私のエラーの原因です。

20
user3718908

それを試してみてください:

storage/frameworkの下にこれらのフォルダを作成します。

  • sessions
  • views
  • cache

今ではうまくいった!

これを試して:

  1. php artisan cache:clear
  2. php artisan config:clear
  3. php artisan view:clear
35
thefallen

あなたはreadme.mdを編集してあなたのlaravelアプリをこのような他の環境にインストールすることができます。

## 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

```
13
Alex B. Santos

このエラーの原因は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;
}

コンストラクターは、Illuminate\View\ViewServiceProvider内のBladeCompilerによって呼び出されます。

/**
 * 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']);
    });
}

それで、さらに遡って、次のコード:

$this->app['config']['view.compiled']

標準のlaravel構造を使用する場合、通常は/config/view.phpにあります。

<?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(...)は、パスが存在しない場合はfalseを返します。したがって、呼び出す

'Please provide a valid cache path.' error.

したがって、このエラーを取り除くためにあなたができることはそれを確実にすることです。

storage_path('framework/views')

または

/storage/framework/views

存在します:)

13
ghabx

私の側の問題(localhostにデプロイ中):ビューズフォルダーがありませんでした。フレームワークフォルダーがない場合は、フォルダーを追加する必要があります。ただし、既にフレームワークフォルダーが存在する場合は、上記のすべてのフォルダー、つまり1.キャッシュ2.セッション3.ビューを確認してください。

フレームワークディレクトリに存在します。

0
Farid Abbas

index.phpに次の行を追加して、この問題を解決しました。

$app['config']['view.compiled'] = "storage/framework/cache";
0
crius