• Единая бд для апи и веба в docker?

    @tasiuk
    Для решения этой проблемы, нужно создать дополнительную сеть, с драйвером bridge, в стаке с сервисами к которым вы хотите предоставить доступ (подключиться).

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

    Пример:

    docker-compose.laravel.yml
    services:
        mysql: 
          image: ...
          networks:
             - default
             - my_private_network
    
        redis: 
          image: ...
          networks:
             - default
             - my_private_network
    
    networks:
      my_private_network:
        name: my_private_network
        driver: bridge


    docker-compose.lumen.yml
    php-fpm:
        image: ...
        networks:
          - default
          - my_private_network
    
    networks:
      my_private_network:
        external: true
        name: my_private_network

    - В первом стаке мы создаем новую сеть, и подключаем нужные нам контейнеры;

    - Во втором стаке мы объявляем о существовании сети которая была создана ранее, и так же подключаем наш php-fpm контейнер, к этой сети, что бы коммуницировать с другими контейнерами по сети;

    После этого, в стаке для Lumen вы можете смело подключиться к контейнерам mysql, redis по их алиасам, как и ранее:

    Lumen .env
    DB_HOST=mysql
    REDIS_HOST=redis


    Успехов!
    Ответ написан
    1 комментарий
  • Как в ларавель 5.5 заставить mysql обрабатывать запросы по очереди?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Открываете транзакцию, вытаскиваете юзера с локом ->lockForUpdate(), проводите свои манипуляции/проверки, сейвите, комиттите транзакцию.

    DB::transaction(function () use (&$user) {
        $user = User::whereKey($user->getKey())->lockForUpdate()->firstOrFail();
        if ($user->balance) // blabla
        $user->balance -= 100;
        $user->save();
    });


    Ничего более не нужно.
    Ответ написан
    5 комментариев
  • Почему eloquent ищет другую сводную таблицу?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Потому что надо читать документацию, в которой написано, как ларавел формирует название для pivot-таблицы, если оно явно не указано в связи и как указать его явно, если не устраивает то, как это делает ларавел.
    Ответ написан
    Комментировать
  • Сколько стоит час веб-разработчика-фрилансера?

    @deliro
    Ты веcь такой кругом молодец, то знаешь, это знаешь. А теперь представь себе среднестатистический проект, который должен приносить бизнесу деньги. За две недели работы ты едва напишешь хлипкий CRUD для данных, неправильно смаппив бизнес-сущности в объекты ORM, ещё через месяц натянешь какой-то слайдер на jQ, попутно захватив 2мб JS кривых библиотек, а через два заказчик поставит тебе плохую оценку, потому что твой ценник он оплатил не за то, что ему нужно, а потому что ты знаешь монады, которые ему даром не сдались.

    А теперь давай представим простого программиста. Из алгоритмов он с трудом вспоминает сортировку пузырьком, а двусвязный список — предел его знаний о структурах данных, и даже этим списком он пользовался два раза в жизни. Хаскель он никогда не видел в глаза, C++ учил только в школе, вместо этого пишет неэффективный код на PHP. И у него есть опыт. За день он распишет сущности, за второй сделает универсальный CRUD, на третий день поднимет фронт на React'е с SSR. Да, внутренности проекта будут "медленными". Вместо O(logN) что-то будет выполняться за O(N) или даже O(N^2), но всем похер. Пока всё работает на приемлемом уровне — бизнес радуется.

    Кстати, к чему эта поучительная лапша? Я хотел сказать, что всеми этими модными словами можно пугать друзей и преподавателей, но в реальной жизни все алгоритмы уже реализованы, все типы данных уже подобраны оптимально. Знать их полезно для себя (чтобы мозг не атрофировался), но не для работы. Для работы тебе нужны такие навыки как:

    * Оптимальный баланс между говнокодом и идеальным кодом
    * Оптимальный баланс между скоростью разработки и оптимизацией кода
    * Оптимальный баланс между поддерживаемым кодом и костылями
    * Умение использовать те инструменты, с которыми ты работаешь. Опять же, для того, чтобы писать быстро, при этом имея минимальное количество говнокода и обеспечивая максимальную поддерживаемость (в пределах сроков). Например, можешь выкинуть в помойку свой Vim, как бы круто ты себя не чувствовал, разрабатывая в консольном редакторе, если продукты от JetBrains позволят за это же время сделать что-то лучше или чего-то больше
    * Чувство "знаю больше менеджеров". Это то чувство, когда тебе кажется, что "вот эта фича скоро изменится" и надо сделать архитектуру заранее более гибкой. Или "вот эту фичу мы через месяц выпилим" и не надо тратить на неё силы — напиши костыль и через месяц с чистой совестью удали его
    * Знания, как сделать ту или иную фичу. Потому что фичи повторяются (немного видоизменяясь) от проекта к проекту. И если ты сделал что-то за два дня, в следующий раз ты похожее сделаешь за три часа

    Что касается инструментов, выбери любой полноценный фреймворк, который умеет решать 90%+ потребностей "из коробки": Symfony, Django, Laravel

    Всякие "минималистичные" поделия вроде Falcon, Flask (в PHP не знаю, я на питоне пишу) оставь хипстерам. Пусть они говорят: "Мой фалкон такой быстрый, он написан на Cython". Тебя это не должно волновать, потому что бизнес с твоей скоростью разработки уже заработал достаточно денег, чтобы купить ещё десять серверов, пока фалконисты неделю гуглили, как прикрутить миграциии и запустить юнит-тесты на VPSке за пять баксов.
    Ответ написан
    5 комментариев