Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (7)

Наибольший вклад в теги

Все теги (44)

Лучшие ответы пользователя

Все ответы (36)
  • Как правильно деплоить laravel проект?

    tommy-vercetti
    @tommy-vercetti
    Symfony/Golang
    Т.к вы не работали с системами контроля версий и не сталкивались с деплоем, то я не буду вам советовать CI/CD с различными ветками и тд. Вам сходу будет сложно разобраться.

    Предлагаю для начала более простой способ:

    Если проект коммерческий, то создаем приватный репозиторий в каком-то сервисе (к примеру, GitHub).
    Коммитим (фиксируем) изменения и пушим их в репозиторий.
    Контроль версий нам нужен для того, чтобы хранить историю изменений проекта, делать откаты в случае ошибки и тд.

    У Laravel есть пакет Laravel Envoy. В файле Envoy.blade.php описывыем список команд что нужно сделать на сервере, подключившись по SSH.
    @task('production:deploy', ['on' => 'production'])
        cd /var/www/my-project-folder
    
        git pull origin master // подтягиваем изменения из репозитория
    
        php composer install --no-dev --optimize-autoloader
    
        php artisan migrate --force // запуск миграций
    @endtask

    И локально (на своем ПК) запускаем таску envoy run production:deploy. Envoy подключится по SSH к серверу и запустит там эти команды.

    Про работу с базамы данных:

    Должно быть несколько БД: локальная и продакшн.
    Допустим, я хочу добавить новое поле в БД. Для этого локально создаю миграцию (это обычный php-класс), описываю какое поле добавить и запускаю её. Коммичу изменения в git и делаю пуш в репозиторий. И запускаю таску envoy run production:deploy, а там у нас уже есть команда для миграций.
    Для генерации тестовых данных для локальной бд можно использовать сиды.
    Ответ написан
  • Как научиться понимать английский язык на слух? Это вообще возможно?

    tommy-vercetti
    @tommy-vercetti
    Symfony/Golang
    Слушайте подкасты:
    1. https://learnenglish.britishcouncil.org/learnengli...
    2. https://esl.culips.com
    3. https://www.allearsenglish.com/podcasts
    4. https://teacherluke.co.uk/archive-of-episodes-1-149

    Начните с learnenglish.britishcouncil.org/learnenglish-podcasts. Схема такая: слушаете 3 раза подкаст. Затем разбираете скрипты, учите слова и слушаете еще 1-2 раза эпизод. После 4-х сезонов почувствуете разницу. Я, мой брат и сестра так прокачали listening.
    В основном я слушаю подкасты по пути в универ/на работу, в очередях и тд.
    Ответ написан
  • Где лучше посмотреть реальные кейсы использования RabbitMQ с примерами кода, в идеале на GO или PHP?

    tommy-vercetti
    @tommy-vercetti
    Symfony/Golang
    Реальные кейсы использования можно посмотреть только на "реальных" проектах. Никто не выкладывает коммерческие проекты на всеобщее обозрение. Мы используем RabbitMQ с компонентом Symfony Messenger для следующих сценариев.

    • SMS/Email сообщения
    • Кропы фото. Сначала фотку загружаем в сторадж GCS. Затем отправляем сообщение в RabbitMQ, где мы из GCS скачиваем на локальный диск, кропим и грузим обратно GCS.
    • Удаление старых файлов: фото, pdf-ки и тд при изменении профайла или при перегенерации инвойса
    • Тяжелые операции, которые могут блокировать респонс. Различные обращения к сторонним API: создание профиля в платежной системе, в salesforce при регистрации.

    Вот простой пример. Мы создаем сущность миссии и рассылаем уведомления менеджерам и part-time employee, находящимся недалеко от места создания миссии. Далее у нас есть 2 воркера (async_new_mission_area_notification_to_manager и async_new_mission_notification_to_part_time_employee), которые слушают это событие.

    namespace App\Domain\Mission;
    
    class Mission implements ToArrayTransformable, RaiseEventsInterface
    {
        public function __construct(/* ... */)
        {
            // ...
    
            $this->initUuid();
    
            $this->raise(new MissionCreatedEvent($this->getUuidString()));
        }
    }
    
    namespace App\Application\Bus\MessageHandler\Event\Mission;
    
    class SendNewMissionAreaNotificationToManager implements MessageSubscriberInterface
    {
        private MissionRepositoryInterface $missionRepository;
    
        public function __construct(MissionRepositoryInterface $missionRepository)
        {
            $this->missionRepository = $missionRepository;
        }
    
        public function __invoke(MissionCreatedEvent $event): void
        {
            $mission = $this->missionRepository->getOneByCriteria(new MatchingUuidCriteria($event->getMissionUuid()));
    
            if (!$mission instanceof Mission) {
                return;
            }
    
            // Здесь уже ищем нужных менеджеров и рассылаем им уведомления
        }
    
        public static function getHandledMessages(): iterable
        {
            yield MissionCreatedEvent::class => [
                'from_transport' => 'async_new_mission_area_notification_to_manager',
            ];
        }
    }
    
    namespace App\Application\Bus\MessageHandler\Event\Mission;
    
    class SendNewMissionNotificationToPartTimeEmployeeHandler implements MessageSubscriberInterface
    {
        private MissionRepositoryInterface $missionRepository;
    
        public function __construct(MissionRepositoryInterface $missionRepository)
        {
            $this->missionRepository = $missionRepository;
        }
    
        public function __invoke(MissionCreatedEvent $event): void
        {
            $mission = $this->missionRepository->getOneByCriteria(new MatchingUuidCriteria($event->getMissionUuid()));
    
            if (!$mission instanceof Mission) {
                return;
            }
    
            // Рассылаем уведомления подходящим part-time employee
        }
    
        public static function getHandledMessages(): iterable
        {
            yield MissionCreatedEvent::class => [
                'from_transport' => 'async_new_mission_notification_to_part_time_employee',
            ];
        }
    }

    Если не заходит Symfony Messenger, то могу посоветовать SwarrotBundle с odolbeau/rabbit-mq-admin-toolkit.
    Ответ написан
  • Шаблоны проектирования - с чего начать знакомство?

    tommy-vercetti
    @tommy-vercetti
    Symfony/Golang
    https://refactoring.guru/ru/design-patterns
    Скажу често, вы эти шаблоны не поймете с первого раза. Нужно, навскидку, сделать 3-4 проекта на Laravel/Symfony, чтобы понять зачем они нужны.
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (9)