我有一个应用程序,我已经工作了几个星期;我正在使用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-compiled
和php artisan optimize
,这两个都会抛出错误),如果我使用它,它将自行修复:
...
composer install --no-scripts
composer dump-autoload -o
php artisan dump-autoload
...