你会如何跳过 Laravel Scout of environment is not production?

How would you skip Laravel Scout if enviroment is not production?

我有一个正在使用 Laravel 编写的应用程序。我对这个框架还很陌生,大部分都不明白。我在 Laravel 的 Scout 中使用 Algolia 作为搜索引擎。在你添加 use Searchable 的模型中,一个特征,记录会自动传递给 Algolia,这很酷。我试图做一个简单的声明 if (App::environment('local'))" exit scout,这样我们就不会将我们的开发数据发送到 Algolia。如果我 运行 超出 10,000 条记录的黑客级别,Scout 也会抛出异常。

在您本地的 .env 中添加

SCOUT_DRIVER=null

在生产中添加

SCOUT_DRIVER=algolia

在config/scout.php中添加

'driver' => env('SCOUT_DRIVER', 'null')

它会自动在本地被忽略,但在生产中有效。 这只是一个建议。尝试根据您的具体情况进行调整。

在您的本地环境中,您可以调用 YourModel::disableSearchSyncing(),这将阻止此模型将数据推送到 Algolia。

与此方法相反的是YourModel::enableSeachSyncing(),但默认情况下会启用搜索,因此通常不需要使用它。

根据 Laravel 5.3 documentation:

  1. .env文件中设置环境:

    APP_ENV=local
    
  2. 判断当前环境:

    $environment = App::environment();
    
  3. 检查 $environment 和 return 正确:

    if (App::environment('local')) {
        // The environment is local
    }
    if (App::environment('local', 'staging')) {
        // The environment is either local OR staging...
    }
    

None 上述解决方案有效我建议您检查 User 模型中的 toSearchableArray() 方法。如果您尝试在本地环境中设置 SCOUT_DRIVER=null,那么您将面临错误,因为您的应用程序往往会在任何环境中推送到 Algolia。

尝试这样做:

public function toSearchableArray()
{
    if (! app()->isLocal()) {
        return [
            'username' => $this->username,
            'age'      => (string) $this->age,
            // and so on ...
        ];
    }
}