• Как сделать ротацию логов?

    буду банальным, но все написано и сделано до нас: есть мощнейшая утилита logrotate, которая делает все довольно красиво и гибко конфигурируется
    Ответ написан
    Комментировать
  • Как удалить файл после использования?

    Вариант первый
    я так понимаю, что осуществляется примерно следующий воркфлоу:
    1. пользователь заходит на страницу
    2. делает запрос к вашему сервису
    3. сервис делает запрок к апишке
    4. сервис получает ответ и вместе с ним изображение
    5. отдает ответ клиенту
    6. конец

    если так, то вы можете получить картинку, сохранить ее, закодить ее в base64, удалить картинку и отдать пользователю картинку в виде base64-строки. браузер умеет отобразить изображение, которое ему подсунули в виде base64-строки
    отображать примерно так: jsfiddle.net/casiano/xadvz
    минус: если картинка будет большой, то эта строка тоже будет большой. она будет передаваться в отрендереной страница - объем страницы вырастет

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

    Вариант третий
    хранить файлы изображений в отдельной папке и периодически ее вычищать. дополнительно можно фильтровать файлы, которые удаляете и удалять только те, которые были созданы (mtime) или к ним был доступ (atime) не позже, чем какой-то промежуток времени
    Ответ написан
    2 комментария
  • Как лучше и проще реализовать поддержку нескольких языков для сайта?

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

    очень советую обратить внимание на raml.org
    из этого дела очень даже неплохо и красиво генерируется документация к API
    Ответ написан
    Комментировать
  • Как "пройти" по ключам массива?

    для этого узкого примера как-то так:
    $array = array(
      'one' => 'hi',
      'two' => 'privet',
      'three' => array('three_1' => 'hi', 'three_2' => 'privet'),
    );
    
    $str = 'three|three_1';
    
    $keys = explode("|", $str);
    
    var_dump($array[$keys[0]][$keys[1]]);


    Updated 1:
    <?php
    
    function foo($array, $str){
    	$keys = explode('|', $str);
    	
    	$keysCount = count($keys);
    	
    	$result = $array;
    	for($i = 0; $i < $keysCount; $i++){
    		if(!is_array($result) && $i < ($keysCount - 1)){
    			throw new Exception("Array depth not expected");
    		}
    		
    		if(!isset($result[$keys[$i]])){
    			throw new Exception(sprintf("Key '%s' not found", $keys[$i]));
    		}
    		
    		$result = $result[$keys[$i]];
    	}
    	
    	return $result;
    }
    
    $array = array(
      'one' => 'hi',
      'two' => 'privet',
      'three' => array('three_1' => 'hi', 'three_2' => 'privet'),
    );
    
    $str = 'three|three_1';
    
    var_dump(foo($array, $str));
    Ответ написан
    4 комментария
  • Как в PyCharm по горячей кнопке выйти в код из встроенного терминала?

    не скажу точно как в чарме, но в сторме (я полагаю, что и в друших IDE аналогтчно) есть хоткей "Hide Active Tool Window" (посмотрите в настройках, Keymap). он позволяет закрыть терминал и вернуться в код если код был активен до терминала
    Ответ написан
  • Зачем запускать сервисы в контейнере от имени непривилегированного пользователя?

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

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

    у меня сложилось впечатление, что контейнеризация сервисов для Вас является серебряной пулей безопасности. к примеру, есть хостинг и на нем есть дырявые сайты, которые чуть ли не каждый день хакают и через них сливают данные с других сайтов т.к. не проставлен open_basedir и все работает под апачем без разделения через SuID или без mpm-itk. и тут Вы познакомились з контейнеризацией и теперь запустили каждый сайт в своем личном окружении и все чики-пики с безопасностью. пример надуманый мною и не факт, что оно так у Вас на самом деле, но суть не в том

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

    вот с чем я сталкивался лично и что мне просто не давало жить. представим, что Вы создали сервис, который дополнительно еще генерирует какие-то файлы. файлы хранится в некоторой папочке в `/foo/bar/beez_service`, но Вы в эту папку монтируете другую папку хост-машины. Ваш сервис запущен от рута. Ваш сервис пишет лог и все эти файлы генерируются с правами рута и с неким chmod-ом, который был указана через umask или еще как-то. обычно над этим не заморачиваются и файлы имеют chmod 0664 - обычным пользователем удалить его невозможно. это как минимум неудобно. я понимаю, Вы можете ответить, что монтировать папки не всегда нужно, что можно использовать `sudo` на хост-машине, что не особо нужно удалять файлы через хост-машину и так далее
    Ответ написан
    Комментировать
  • Как правильно работать с изоляцией файловой системы в Docker'e?

    для того, чтобы замаунтить директорию /home/User/WebApps/Site1/app хост-машины в директорию /var/www/html в контейнере нужно добавить следующее в команду запуска контейнера:
    [...] -v /home/User/WebApps/Site1/app:/var/www/html [...]
    Ответ написан
    Комментировать
  • Nodejs. Как создать файл с учётом структуры папок?

    Да, нужно создавать каждую директорию отдельно. если это лениво, то добрые люди написали модуль: https://github.com/substack/node-mkdirp
    Ответ написан
    Комментировать
  • Не подскажете, как сделать запрос?

    может быть как-то так:
    mysqldump -u USERNAME -p PASSWD DB_NAME TBL_NAME --where="id > 20 AND id < 21" > dump.sql

    у меня в таком виде отработало вполне ожидаемо. попробуйте
    Ответ написан
    Комментировать
  • Как посмотреть сайт, на котором стоит редирект?

    curl http://127.0.0.1:8000
    вы увидите HTML-код ответа
    curl http://127.0.0.1:8000 -I
    увидите заголовки ответа

    к примеру, в таком виде отдает редирект Symfony:
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8" />
            <meta http-equiv="refresh" content="1;url=/" />
    
            <title>Redirecting to /</title>
        </head>
        <body>
            Redirecting to <a href="/">/</a>.
        </body>
    </html>

    HTTP/1.1 302 Found
    Host: 127.0.0.1:8000
    Connection: close
    X-Powered-By: PHP/7.0.4-7ubuntu2.1
    Cache-Control: no-cache
    Location: /
    Content-Type: text/html; charset=UTF-8
    X-Debug-Token: bc419c
    X-Debug-Token-Link: http://127.0.0.1:8000/_profiler/bc419c
    Date: Sat, 09 Jul 2016 08:21:56 GMT
    Ответ написан
    Комментировать
  • Я хочу хорошую библиотеку на PHP для MySQL. Я зажрался, или такое есть и активно используется?

    Вот вам функциональный комбайн для работы с БД www.doctrine-project.org
    Ответ написан
    Комментировать
  • Doctrine: связь один-к-одному в аннотациях: почему сразу же срабатывает "ленивая" загрузка?

    привет, ребятки!
    на самом деле не совсем понятен вопрос. по крайней мере лично мне

    при выборке объектов через find используется ленивая загрузка: для объектнов AppBundle:Product выбираются все его поля, а для всех отношений формируются прокси-объекты, через которые через дополнительные запросы к БД можно получить и сами объекты отношений

    есть нюанс при использовании DQL:
    • когда Вы не прописываете ничего в select, то выбираются все поля объекта (для отношений все так же готовятся прокси)
    • когда вы прописываете в select нужные Вам поля объекта, то только они и выбираются (для отношений все так же готовятся прокси)
    • а вот если вы пропишите в select выборку отношений и укажете join, то будет выполнен запрос с джоином и сразу будут выбраны соответствующие объекты отношений


    возможно, Вы что-то упустили? в одном случае Вы обращаетесь к AppBundle:Product, во втором к TestBundle:Company и говорите о выборке субдомена

    ленивая загрузка происходит всегда если вы не используете join, или явно не указываете что нужно fetch-ить сущности отношений как EAGER
    Ответ написан
  • Какую Node.js библиотеку для промисов использовать?

    Я остановился на bluebird - там много разных полюшечек
    Ответ написан
    Комментировать
  • Как правильно возвращать промис?

    На сколько я помню если user.find() возвращает промис, то его нужно вернуть. Тоесть должно быть примерно следующее:
    function findAll() {
      return user.find()
      .then(function(doc) {
        return user.find();  //(1)
                     // Да это глупо,но тут просто для примера так сделано
      });
    }
    Ответ написан
    2 комментария
  • Комплексный логический оператор where Sympfony Sonata?

    в случае комплексного использования WHERE следует писать что-то типа
    $qb
        ->where('u.firstName = :fitst_name')
        ->andWhere('u.surname = :user_name')
        ->setParameters(array('fitst_name' => 'FirstName', 'user_name' => 'UserName'))
    Ответ написан
    Комментировать
  • Питон для инженера?

    для себя писал демона, который собирает статистику о потреблении ресурсов Docker-контейнерами и потом отдает данные Munin-у в виде влагина. Я уверен, что код неидеален ибо я не python-разработчик, а использую его только для своих насущных задач по администрированию https://github.com/dvapelnik/docker-spectator
    Ответ написан
    Комментировать
  • Как правильно организовать роутинг на node?

    я думаю, что следует использовать параметризированный роут:

    app.get('/user/:field', function(req, res){
        console.log(req.params.field);
    //.....
    Ответ написан
    2 комментария
  • Легкий инструмент для тестирования websockets?

    я так понимаю, что нужно протестировать как работает серверное приложение с использованием WS. я бы посоветовал посмотреть в сторону Jasmine и написать несколько приемочных тестов для контроля работы WS. я использую Jasmine-Node для приемочного тестирования RESTFull API
    jasmine.github.io
    https://github.com/mhevery/jasmine-node
    Ответ написан
    Комментировать
  • Как сделать автоматический git pull на сервере?

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