laravel 'class not found' 生产错误

Posted

技术标签:

【中文标题】laravel \'class not found\' 生产错误【英文标题】:laravel 'class not found' error on productionlaravel 'class not found' 生产错误 【发布时间】:2015-02-12 00:52:25 【问题描述】:

这里有点奇怪。

我有人物和动作。 Person 可以有多个 Action,而每个 Action 只属于一个 Person。我正在使用 Chumper 的数据表来显示人员列表,包括他们的操作计数。

自从迁移到生产(伪造)服务器后,我得到了

Symfony \ Component \ Debug \ Exception \ FatalErrorException (E_ERROR)
Class 'action' not found

调用数据表时。显示的错误

/­vendor/­laravel/­framework/­src/­Illuminate/­Database/­Eloquent/­Model.php:721

public function hasOne($related, $foreignKey = null, $localKey = null)

    $foreignKey = $foreignKey ?: $this->getForeignKey();
    $instance = new $related;
    $localKey = $localKey ?: $this->getKeyName();

表明我的 hasMany 关系有问题:

# /models/Person.php
class Person extends Eloquent 

    public function actions()
    
        return $this->hasMany('Action');
    

# /models/Action.php
class Action extends Eloquent  

    public function person()
    
        return $this->belongsTo('Person', 'person_id');
    

不过,我认为这些都很好,因为它们都可以在本地运行。数据表在其他地方也可以正常工作,调用其他项目及其相关操作没有任何问题。

我在生产服务器上尝试了 composer dump-autoload 和 artisan dump-autoload ,但无济于事。 forge 上的部署脚本如下:

git pull origin master
composer install
php artisan migrate --env=production

我无法判断这是配置问题、数据库问题、代码问题还是其他问题。我已经回答了许多类似的问题,但没有任何问题。非常感谢任何帮助。

【问题讨论】:

你是在 windows 上开发吗? 不,OSX。如果有帮助,我的模型文件都以大写字母开头。 嗯...你的代码中有action吗? (进行区分大小写的搜索) 我在我的ActionsController.php 和一些视图文件中使用$action 作为变量,如果这就是你的意思吗? Route::model('action', 'Actions'); 也出现在我的路由文件中。 那些看起来不会产生错误... 【参考方案1】:

谁可能有同样的问题,三重检查你的模型的外壳!我错了,这就是为什么本地在 mac 上工作但在服务器上不工作的原因

【讨论】:

【参考方案2】:

所以我想我自己搞砸了这个。

我一直很懒惰,使用旧的“计数”方法将 function datatablePersons() 留在 PersonsController.php 中,依赖于长期失效的关系(导致 n+1,因此必须分箱),因此它在一个actions 类,无论何时调用该关系。

其他控制器中的数据表函数(使用更简洁的“计数”方法)工作正常,因此我刚刚重写了 datatablePersons() 以使用相同的方法。

我还没有完全正确地查询(至少是雄辩的) - 在这里看到这个问题:mysql join ON and AND to laravel eloquent - 但class not found 错误肯定已经消失了。

我(大量)猜测本地机器上的类映射没有被刷新,因为删除了任何被删除的东西,而生产机器每次推送都会重建,因此存在差异......?

无论如何,这不再是问题。

【讨论】:

以上是关于laravel 'class not found' 生产错误的主要内容,如果未能解决你的问题,请参考以下文章

laravel - ReflectionException in Container.php, Class not found?

Laravel Lumen + Broadcasting + Redis + Class pusher not found

在 laravel 8 中出现一个名为“Class 'Database\Seeders\App\Models\Product' not found'' 的错误

关于laravel 5.3 使用redis缓存出现 找不到Class 'PredisClient' not found的问题

API POST 请求在邮递员和 Laravel 上返回 404 NOT FOUND PAGE

解决 Laravel InvalidArgumentException: Authentication views not found