• Контейнеризация для локальной разработки?

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

    Им еще и внезапно! ознакомиться с кодом надо перед работой.
    А вы хотите что он первую задачу решил через час после устройства на работу?

    А так если настолько часто меняются разработчики и никто из них не может без инструкции завести проект, то проблема-то не во времени настройки проекта. У вас какой-то джуно-конвеер видимо и проект который завести это что-то нетривиальное.

    нужно объяснять, что надо надо ставить себе OpenServer, выбирать нужную конфигурацию, кучу настроек и т.д.

    нужно сделать проект таким чтобы его можно было запустить в принципе без проблем.
    А не запустить с определенными конфигами на определенном софте.
    Не говоря уже про тех кто сидит на линуксе или макоси. Их вы не берете на работу?)

    Я на локалке использую свой набор софта для всех проектов и все разработчики работают как привыкли.

    А докер вообще мимо разработки, там держу только базы на локалке.
    При обычной разработке неудобно + вечные косяки со скоростью диска в докере на маке/винде или еще чего-нибудь.
    В общем дичайше неудобно.
    Ответ написан
    Комментировать
  • Контейнеризация для локальной разработки?

    @Arik
    Правильно понимаю, что docker можно также спокойно использовать локально на windows ? Как вы локально разворачиваете докер ?

    можно, но вроде на винде, как и на маке, очень тормознуто все, приходится юзать docker-sync.io

    При разворачивании проекта через docker, создается некая виртуализация. Как тогда работать с проектом через IDE ? Если все окружение проекта на linux, а мы работаем на windows, как вообще люди работают через IDE в таких случаях ?

    Вернее будет не просто "на linux", а на разных linux, т.е. БД у себя, web-сервер у себя и т.д.

    Нужно курить доку в разделе монтирования, если вкрации, то все файлы лежат в основной системе (где и IDE естественно), а папку с проектом монтируем в нужные контейнеры, где веб-сервер, бд и т.д. уже знают что делать с этими файлами
    Ответ написан
    Комментировать
  • Контейнеризация для локальной разработки?

    @vldud
    Правильно понимаю, что docker можно также спокойно использовать локально на windows ?
    - правильно
    Как вы локально разворачиваете докер ?
    - https://docs.docker.com/docker-for-windows/install/
    Как тогда работать с проектом через IDE ?
    - если речь идет о php, то в PhpStorm интеграция реализована и описана прекрасно
    Если все окружение проекта на linux, а мы работаем на windows, как вообще люди работают через IDE в таких случаях ?
    - вот вы и поднимете свое linux окружение в docker-контейнере
    Ответ написан
    Комментировать
  • Контейнеризация для локальной разработки?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Правильно понимаю, что docker можно также спокойно использовать локально на windows ?

    Да. Но есть свои ньюансы. В среде Unix-систем работать с докером гораздо проще.

    Как вы локально разворачиваете докер ?

    через docker-compose:
    docker-compose up -d

    При разворачивании проекта через docker, создается некая виртуализация. Как тогда работать с проектом через IDE ?

    Да все так же - ваша папка с проектом мапится в контейнер, а вы спокойно открываете у себя в IDE.
    Единственно - с отлаживанием проекта в IDE могут возникнуть проблемы.
    Ответ написан
    1 комментарий
  • Как сделать такой редирект в htaccess?

    @dodo512
    RewriteCond %{QUERY_STRING} A|B
    RewriteRule (.*) /$1? [R=301,L]
    Ответ написан
    Комментировать
  • Как контролировать жизнь php-консюмеров?

    Stalker_RED
    @Stalker_RED
    Каждый консюмер периодически обязан подать признаки жизни - в некую таблицу БД записывать дату и время активности.

    Кажется, вы близки к тому, чтобы изобрести gearman.

    Если делать самоделку, то обычно воркер беря задачу отмечает в таблице время старта и свой pid, и время завершения. И какой-то watcher проверяет таски которые слишком долго в работе и перезапускает.
    Ответ написан
    Комментировать
  • Как добавить в автозагрузку службу через systemctl enable, если сервис является символьной ссылкой?

    @pfg21
    ex-турист
    вполне естественная защита "от дурака" - большая вложеность симлинков может гденибудь да порваться. да и не исключен вариант что такое проворачивает какой либо зловред пытаясь вынести системные файлы подальше от системных запретов.
    положи в папку своего проекта символьную ссылку на файл юнита системд.
    Ответ написан
    2 комментария
  • RabbitMQ: что такое exchange, и где его место?

    @EvgeniiR
    https://github.com/EvgeniiR
    Exchange это просто посредник который решает как роутить сообщения в очереди, тем самым отвязывая немного продюсер от знания как и кем будут сообщения обрабатываться.

    Нужно ли выносить в отдельный файл exchange, и стучаться к нему при отправке сообщения, или можно оставить в коде продюсера ?

    Что значит "выносить exchange в отдельный файл"? Exchange он в брокере.

    Продюсеру нужно лишь имя exchange знать чтобы сообщения туда постить, и Routing Key при необходимости.
    Создавать exchange лучше конечно не в продюсере.

    Чтобы перестраховаться и убедиться что exchange существует можно, конечно, отправить сообщение с объявлением exchange с флагом passive( https://www.rabbitmq.com/amqp-0-9-1-reference.html... )
    Ответ написан
    3 комментария
  • Как применять только 1 событие?

    Get-Web
    @Get-Web Куратор тега JavaScript
    Front-End Developer
    Мало информации, но чтобы наверняка, вы можете удалить все события submit на нужных вам формах:
    $('form').unbind('submit');
    Затем повесить свои обработчики, реализовать в них коллбеки и собственные события на которые можно будет подписаться, чтобы выполнить все те действия, которые им необходимы и которые позволит ваш скрипт.

    Но если пользователи будут подключать свои скрипты после ваших функций естественно они будут добавлены и тут уже в зависимости от возможностей, можно к примеру по таймеру периодически очищать подписки и оставлять только свою...
    Ответ написан
    Комментировать
  • Dependency Injection Container, попробовал на практике - не понял смысла?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Контейнер
    Главная задача контейнера — переиспользовать сервисы более одного раза, например некий провайдер более чем в 1 месте или некий Sender в 20 местах по всему приложению. И упростить к ним доступ.

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

    Взаимодействие относительно простых объектов/сущностей в рамках одного слоя лучше делать вашим способом — оно логичное и понятное и вообще контейнер будет только мешать, даже больше — не к месту в этой задаче. Это вам в ответе на том форуме и отметили.

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

    Dependency Injection
    И в будущем удобно будет тестировать ?

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

    Главное не объединяйте эти два понятия. Сам паттерн — просто частный случай инверсии зависимости, класс получил зависимость через конструктор/сеттер, и все, он не знает деталей, потому и тестить проще — просто подменил на пустышку.
    А контейнер — средство для работы со сложным приложением, которое внедряет как раз таки, то есть выполняет работу внедрения. Центральное в нем — слово контейнер.

    Несколько точек входа
    По поводу ваших точек входа: несколько точек входи = несколько иницализаций.
    Как-бы они разные по своей сути приложения уже по определению получаются.
    Но вы можете упростить, и вынести инициализацию контейнера в абстракцию — в некий класс App/Kernel и там это делать, а в точке входа инициализировать не контейнер раз за разом, а именно конкретное приложение.
    Ответ написан
    7 комментариев
  • GuzzleHttp, как записать информацию дебага в переменную?

    TommyV888
    @TommyV888 Куратор тега PHP
    -
    Создайте 'php://memory' и передайте его. Если данные не превысят 2Мб, они как любая переменная будут находится в оперативной памяти, если превысят то под них будет создан временный файл.
    $debug = fopen('php://memory', 'r+');
    ...
    rewind($debug );
    $log = stream_get_contents($debug);

    P.S. Есть вероятность сломать скрипт, если лог окажется слишком большим.
    Ответ написан
    2 комментария
  • Как правильно организовать уровни исключений и логирование?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Основная ошибка проектировать исключения с учётом как их будут использовать, использование исключений это задача кода приложения, код приложения может быть разный, может меняться например
    Сервис пользователя UserService имеет метод получения пользователя по id на выходе только UserEntity если по каким то причинам нет пользователя то кидани UserNotFoundException
    Теперь приложение варианты использования:
    1. Для рест апи в контроллере сделаем запрос на получение пользователя и обработав исключение там же отправим ответ 404, отсутствие пользователя не так критично.
    2. Есть форма сохранения например товара или заказа, и нужно получит информацию о пользователе по его сессионной id, делаем запрос а пользователя нет, обрабатываем исключение например глобальным обработчиком приложения и логируем, выдаём пользователю уведомление о сбое, вот тут критично. 500 ответ
    Ответ написан
    5 комментариев