can't composer install / update on digital ocean, class not found
这个让我很难过。 我git clone编辑了我在数字海洋(LEMP堆栈)上的回购并检出了development分支。 在这一点上都很好。 然后我做一个composer install来安装deps,这个死了:
1 2
| PHP Fatal error: Class 'App\MyApp\Api\Transformers\ProjectTransformer' not found
in /home/greg/MyApp/app/Providers/DatabaseServiceProvider.php on line 67 |
DatabaseServiceProvider在顶部有一个use语句,如:
1
| use App\MyApp\Api\Transformers\ProjectTransformer; |
这是一个laravel 5项目,它的价值。 DatabaseServiceProvider.php具有名称空间namespace App\Providers;作曲家抱怨的ProjectTransformer的内容是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?php namespace App\MyApp\Api\Transformers;
class ProjectTransformer extends Transformer
{
/**
* @var array
*/
protected $visible_fields = [
'id',
'title',
'client_id',
'division_id',
'project_manager_id',
'probability',
'total_contract_value',
'description',
'devs'
];
}``` |
所以,composer表示我在DatabaseServiceProvider中使用ProjectTransformer并且无法找到。 该文件绝对存在,命名空间似乎是正确的......我还缺少什么? 另一个奇怪的问题是我可以在本地(在宅基地)从头开始composer install这个分支没有问题。 它只是在数字海洋上抱怨。 谢谢你的建议!
-
可能是文件权限问题?
-
感谢@zeratulmdq的响应,似乎不是文件权限问题,所有文件都归我的用户所有,并且存在于我的主文件夹中。 同一目录中的其他文件似乎按预期加载。
在shell中,试试这个:
1
| composer install --no-scripts |
如果成功运行,则在没有--no-scripts标记的情况下再次尝试。
--no-scripts标记将阻止编写器运行任何特定于Laravel的设置/拆除脚本,这些脚本通常作为编写器操作的一部分运行。您看到的错误消息可能是由于您的Laravel安装尚未完全设置(这并不奇怪,因为您尝试将其安装在新的位置)。
这有点鸡蛋和鸡蛋问题:自动加载器尚未设置,因此无法解析名称空间。但它无法设置自动加载器,因为它失败了,因为Laravel抱怨它无法解析相应的命名空间。
在没有脚本的情况下运行编写器将使作曲家有机会完成其工作 - 安装相应的软件包,初始化自动加载器 - 而不会失败,因为Laravel无法找到所需的软件包。然后,一旦作曲家有机会做到这一点,你可以再次运行它,Laravel将找到它需要的东西。
-
所以--no-scripts标志允许作曲家完成它的工作。删除标志会带来错误。我现在肯定我错过了什么或者什么东西拼错了,但我不能为我的生活追踪它。我很感激@kryten的回应!
-
奇怪的。这是一个想法:在本地计算机上将存储库从其原点克隆到临时位置。然后运行diff --brief -r old_repo/ new_repo/。 (从这个回答)这将为您提供两个存储库之间不同的文件列表(包括可能在一个或另一个中丢失的文件)
-
谢谢@Kryten!下班回家,将在今晚拍摄。感谢您抽出宝贵时间做出回应!
-
太奇怪了,我把数字海洋的项目文件夹rsync到我当地的laravel宅基地安装。 Ran作曲家安装,它完成没有问题。所以有一些特定的东西似乎会导致这个问题...现在缩小它的范围......
-
有什么东西你没有提交到您的存储库?这不会通过git clone复制到DO。
-
不是我知道的,它抱怨的文件是我目前正在检查的分支。我可以vi path/to/myfile.php并且它都很好。没有拼写错误和命名空间都正确导入。因此,作为测试,我销毁了盒子并使用LAMP堆栈创建了一个新的Droplet。否则,相同的服务器设置,并按预期运行composer update安装所有deps,没有错误。