Laravel - файл composer.json не развертывается при развертывании пользовательских команд Artisan

У меня есть приложение Laravel, которое развернуто на тестовом и реальном сервере с использованием конвейеров GitLab.

Недавно я решил создать свою собственную команду Artisan, которую теперь хочу развернуть на тестовом сервере, однако при этом заметил следующую ошибку:

In Application.php line 1258:
                                                                               
  file_get_contents(/data/app/my-app-name/composer.json): failed to open stream: No such file or directory

Я подключился к серверу по SSH и могу подтвердить, что файла composer.json нет, но я не знаю, почему его там нет.

Я протестировал развертывание с командой и без нее, и без нее он отлично работает - единственная разница между успешным и неудачным развертыванием - это добавление одной настраиваемой команды artisan.

Если это полезно, моя команда выглядит следующим образом:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Config;
use File;

class Maintenance extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'maintenance:toggle';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Toggles a custom maintenance mode on or off';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // Get current config file
        $array = Config::get('maintenance');

        // Toggle 'enabled' value
        $array['enabled'] = !$array['enabled'];

        // Get string representation of array
        $data = var_export($array, 1);

        // Overwrite file - this causes change to persist, unlike Config::set()
        if(File::put(config_path() . '/maintenance.php', "<?php\n return $data ;")) {
            $this->info('Maintenance mode ' . (!$array['enabled'] ? 'enabled' : 'disabled') . '!');

            // Clear and re-cache config
            $this->callSilent('config:cache');
        } else {
            $this->error('Failed to modify config value');
        }
    }
}

Эта команда находится в моем app/Console/Commands каталоге, и я не менял свой app\Console\Kernel.php файл, поскольку документация Laravel указывает, что любая команда в папке Commands будет автоматически импортирована Kernel.php с использованием этой строки $this->load(__DIR__.'/Commands');

Заранее благодарим за любую помощь и дайте мне знать, есть ли еще какая-либо полезная информация.

Ваше здоровье

РЕДАКТИРОВАТЬ:

Приложение развертывается с помощью следующего скрипта gitlab-ci.yml:

    - env | grep DOTENV | sed  's/DOTENV_//g' > .env
    - |
      rsync \
        -a -z \
        --include '.env' \
        --include './public/angular' \
        --exclude /.vscode/ \
        --exclude ./angular/ \
        --exclude database/ \
        --exclude docs/ \
        --exclude node_modules/ \
        --exclude /scripts/ \
        --exclude tests/ \
        --exclude '/*.*' \
        ./ \
        $SRV_SSH_USER@$SRV_IP_ADDRESS:$DEPLOY_DIR
    - |
      ssh $SRV_SSH_USER@$SRV_IP_ADDRESS <<EOF
        rm -rf /tmp/$SRV_DEPLOY_DIR
        mv /data/app/$SRV_DEPLOY_DIR /tmp
        chmod 775 -R $DEPLOY_DIR
        chown $SRV_SSH_USER:www-data -R $DEPLOY_DIR
        mv $DEPLOY_DIR /data/app/$SRV_DEPLOY_DIR
        php /data/app/$SRV_DEPLOY_DIR/artisan config:cache
        php /data/app/$SRV_DEPLOY_DIR/artisan view:clear
        php /data/app/$SRV_DEPLOY_DIR/artisan route:clear
        php /data/app/$SRV_DEPLOY_DIR/artisan up
      EOF

Однако я не понимаю, как этот сценарий может вызывать проблему, поскольку он работает для развертываний без этой новой команды artisan.


person ajbourne98    schedule 20.08.2020    source источник
comment
Поделитесь, пожалуйста, подробностями. Как вы запускаете развертывание? А как это связано с nginx?   -  person Nico Haase    schedule 20.08.2020
comment
может быть, вы проигнорировали composer.json в .gitignore?   -  person SviesusAlus    schedule 20.08.2020
comment
@SviesusAlus определенно нет - как я уже сказал, он работает для всех других развертываний, только когда я включаю эту команду, она не отображается на сервере   -  person ajbourne98    schedule 20.08.2020
comment
Привет, @NicoHaase. Я пометил Nginx, потому что сервер, на котором я развертываю, работает под управлением Nginx, хотя я признаю, что это вряд ли имеет отношение к проблеме. Я отредактировал свой вопрос, включив в него сценарий развертывания   -  person ajbourne98    schedule 20.08.2020


Ответы (1)


Так мне удалось решить вопрос. Команда находилась в каталоге App\Console\Commands - я переименовал его в App\Console\Custom_commands, а в App\Console\Kernel.php импортировал вручную,

protected $commands = [
    Maintenance::class
];

Это также сработало, если я сохранил команду в другом каталоге, т.е. использованное здесь имя не имеет значения (пока оно не называется Commands)

Честно говоря, я понятия не имею, почему мне пришлось это сделать, чтобы заставить его работать, поэтому я просто отвечаю на это, если у кого-то такая же проблема.

Ваше здоровье

person ajbourne98    schedule 27.08.2020