Laravel“Class not found ...”在运行artisan命令时(但不是作曲家)

时间:2014-09-03 01:43:01

标签: php laravel laravel-4

我有一个应用程序,我已经工作了几个星期;我正在使用Vagrant + Homestead进行本地开发,而Forge + Linode用于临时环境;直到几天前,我的工作流程工作正常,但是现在当部署脚本在Forge中运行时(特别是composer install),它会出错:

[RuntimeException]
  Error Output: PHP Fatal error:  Class 'Reputationhub\ReputationhubServiceProvider' not found in /home/vagrant/Sites/reputationhu
  b/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 157
  PHP Stack trace:
  PHP   1. {main}() /home/vagrant/Sites/reputationhub/artisan:0
  PHP   2. require_once() /home/vagrant/Sites/reputationhub/artisan:30
  PHP   3. require() /home/vagrant/Sites/reputationhub/bootstrap/start.php:60
  PHP   4. Illuminate\Foundation\ProviderRepository->load() /home/vagrant/Sites/reputationhub/vendor/laravel/framework/src/Illumin
  ate/Foundation/start.php:210
  PHP   5. Illuminate\Foundation\ProviderRepository->compileManifest() /home/vagrant/Sites/reputationhub/vendor/laravel/framework/
  src/Illuminate/Foundation/ProviderRepository.php:57
  PHP   6. Illuminate\Foundation\ProviderRepository->createProvider() /home/vagrant/Sites/reputationhub/vendor/laravel/framework/s
  rc/Illuminate/Foundation/ProviderRepository.php:121

实际上,作曲家后续运行的子命令php artisan clear-compiled失败了。如果我自己运行它,同样的问题。运行composer install --no-script运行正常。 当我看vendor/composer/autoload_classmap.php时,它缺少各种各样的东西,并且只有几行(通常更大),所以无论Laravel做什么都没有正确找到正确的类。

奇怪的是,运行composer dump-autoload -o似乎可以解决它; autoload_classmap.php文件找到所有内容,应用程序运行正常,直到php artisan ...尝试执行任何操作,然后才会破坏应用程序。

最终结果是Forge部署被打破;我可以手动跳转到服务器并运行composer dump-autoload -o来修复它,但这似乎不对。

我认为我对研究解决方案已经相当彻底,但到目前为止我找不到任何东西,所以任何帮助都会受到赞赏。

更新:进一步澄清

这是Laravel 4.2。

我的composer.json自动加载部分如下所示:

...
"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ],
    "psr-4": {
        "Reputationhub\\": "app/"
    },
    "files": []
},
...

提供程序已添加到app.php中的“providers”数组中,如下所示:

...
'Reputationhub\ReputationhubServiceProvider',
...

我的提供者文件(app/Reputationhub/ReputationhubServiceProvider.php)如下所示:

<?php namespace Reputationhub;

use Reputationhub\EventSubscribers\MetricsEventSubscriber;
use Illuminate\Support\ServiceProvider;

class ReputationhubServiceProvider extends ServiceProvider {

...

}

更新2:更多测试

不确定它的作用,但是composer install似乎做了一些坏事,打破了应用程序。要修复它,而不是在部署脚本中使用composer install(后来将调用php artisan clear-compiledphp artisan optimize,这两个都会抛出错误),如果我使用它,它将自行修复:

...
composer install --no-scripts
composer dump-autoload -o
php artisan dump-autoload
...

0 个答案:

没有答案