Laravel运行工匠命令时出现“找不到类...”(但没有作曲家)

Jer*_* S. 5 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
Run Code Online (Sandbox Code Playgroud)

实际上,php artisan clear-compiled此失败是后来Composer运行的子命令。如果我自己运行它,同样的问题。运行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": []
},
...
Run Code Online (Sandbox Code Playgroud)

提供者已被添加到“提供者”数组中,app.php如下所示:

...
'Reputationhub\ReputationhubServiceProvider',
...
Run Code Online (Sandbox Code Playgroud)

我的提供程序文件(位于app/Reputationhub/ReputationhubServiceProvider.php)如下所示:

<?php namespace Reputationhub;

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

class ReputationhubServiceProvider extends ServiceProvider {

...

}
Run Code Online (Sandbox Code Playgroud)

更新2:更多测试

不知道它做什么,但composer install似乎做坏了事情,破坏了应用程序。要解决此问题,而不是composer install在部署脚本中使用(随后将调用php artisan clear-compiledphp artisan optimize,这两个脚本都会引发错误),如果使用此脚本,它将自行修复:

...
"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ],
    "psr-4": {
        "Reputationhub\\": "app/"
    },
    "files": []
},
...
Run Code Online (Sandbox Code Playgroud)