невозможно установить / обновить композитор в цифровом океане, класс не найден

этот поставил меня в тупик. Я git clone просмотрел свое репо в Digital Ocean (стек LEMP) и проверил ветку development. На данный момент все хорошо. Затем я делаю composer install, чтобы установить deps, это умирает с:

PHP Fatal error:  Class 'App\MyApp\Api\Transformers\ProjectTransformer' not found 
in /home/greg/MyApp/app/Providers/DatabaseServiceProvider.php on line 67

У DatabaseServiceProvider есть инструкция use вверху, например:

use App\MyApp\Api\Transformers\ProjectTransformer;

Это проект на laravel 5 того, чего он стоит. DatabaseServiceProvider.php имеет пространство имен namespace App\Providers;. Содержимое ProjectTransformer, на которое жалуется композитор:

<?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 заявляет, что я использую ProjectTransformer в DatabaseServiceProvider, и это не может быть найдено. Файл абсолютно существует, пространства имен кажутся правильными ... что еще мне не хватает? Другая странная проблема заключается в том, что я могу composer install эту ветку с нуля локально (на усадьбе) без проблем. Только в цифровом океане он жалуется. Спасибо за любой совет!


person Greg    schedule 12.05.2015    source источник
comment
Может быть проблема с правами доступа к файлу?   -  person zeratulmdq    schedule 12.05.2015
comment
Спасибо за ответ @zeratulmdq, похоже, это не проблема с правами доступа к файлам, все файлы принадлежат моему пользователю и находятся в моей домашней папке. Другие файлы в том же каталоге загружаются должным образом.   -  person Greg    schedule 12.05.2015


Ответы (1)


В оболочке попробуйте это:

composer install --no-scripts

Если это работает успешно, попробуйте еще раз без тега --no-scripts.

Тег --no-scripts не позволяет композитору запускать какие-либо специфичные для Laravel сценарии установки / удаления, которые обычно запускаются как часть операций композитора. Сообщение об ошибке, которое вы видите, вероятно, связано с тем, что ваша установка Laravel еще не полностью настроена (что неудивительно, поскольку вы пытаетесь установить ее в новом месте).

Это своего рода проблема с курицей и яйцом: автозагрузчик еще не настроен, поэтому он не может разрешить пространства имен. Но он не может настроить автозагрузчик, потому что он не работает, потому что Laravel жалуется, что не может разрешить соответствующие пространства имен.

Запуск composer без скриптов даст композитору возможность выполнить свою работу - установить соответствующие пакеты, инициализировать автозагрузчик - без сбоев, потому что Laravel не может найти нужные ему пакеты. Затем, как только композитор получит возможность сделать это, вы можете запустить его снова, и Laravel найдет то, что ему нужно.

person Kryten    schedule 12.05.2015
comment
Таким образом, флаг --no-scripts позволяет композитору завершить свою работу. Удаление флага возвращает ошибку. Теперь я уверен, что мне не хватает чего-то или что-то написано с ошибкой, но я не могу отследить это. Я ценю ответ @kryten! - person Greg; 12.05.2015
comment
Странный. Вот такая мысль: на вашем локальном компьютере клонируйте репозиторий из его источника во временное место. Затем запустите diff --brief -r old_repo/ new_repo/. (из этого ответа) Это даст вам список файлов, которые различаются между двумя репозиториями (включая файлы, которые могут отсутствовать в одном или другом) - person Kryten; 12.05.2015
comment
Спасибо @Kryten! Еду домой с работы и попробую сегодня вечером. Спасибо, что нашли время ответить! - person Greg; 13.05.2015
comment
Так странно, что я синхронизировал папку проекта из цифрового океана в свою локальную установку laravel Homestead. Выполните установку композитора, и она завершится без проблем. Итак, есть что-то конкретное, что нужно сделать, кажется, что может вызвать проблему ... теперь сузим, что это такое ... - person Greg; 13.05.2015
comment
Есть ли что-то, что вы НЕ фиксируете в своем репозитории? Это не будет скопировано в DO через git clone. - person Kryten; 13.05.2015
comment
Не то, чтобы я в курсе, файл, на который он жалуется, находится в ветке, в которой я сейчас проверяю. Я могу vi path/to/myfile.php, и все в порядке. Никакие опечатки и пространства имен не импортируются правильно. Поэтому в качестве теста я уничтожил коробку и создал новую каплю со стеком LAMP. В остальном такая же настройка сервера, и запуск composer update установил все депы, как ожидалось, без ошибок. - person Greg; 13.05.2015