• MySQL PDO, Почему все значения при выборке типа string?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Зачем вы задаёте не тот вопрос, с которым у вас проблема?:)

    Ваша проблема в том, что вы хотите проэксплуатировать баг в ПДО, из-за которого он не сообщает об ошибке.
    Не надо этого делать.
    Передавайте ровно столько параметров, сколько "масок" в запросе. Проблема решена.
    Ответ написан
    Комментировать
  • Подгрузка производственного календаря

    @wait
    Для России есть официальный источник на портале открытых данных РФ:
    data.gov.ru/opendata/7708660670-proizvcalendar
    Ответ написан
    1 комментарий
  • Правильно ли я понимаю, что методология БЭМ несовместима с идеей SASS?

    GeneMoss
    @GeneMoss
    void
    Очень совместимы:
    .block {
        &__element {
            &--modifier {
                 color: black;
            }
        }
    }


    На выходе:
    .block__element--modifier {
        color: black;
    }
    Ответ написан
    1 комментарий
  • Как настроить backup VDS на Яндекс.Диск?

    @mureevms
    Предисловие.
    Вы должны смонтировать Ядиск как описано в этой статье в каталог /mnt/yadisk, туда будут копироваться все бэкапы
    Для бэкапа всей системы лучше пользоваться инструментами которые предлагает хостер. Если таких нет или планируется переезд всей системы, то используйте п.1.
    Специально оставляю одну копию каждого бэкапа на VDS для удобства восстановления какого-либо файла.
    Прокомментирую только первый файл, остальные сделаны по подобию.
    Каталоги в /home/backup/... и /mnt/yadisk/... должны быть созданы.
    Скрипт бэкапа разбит на 4 штуки намеренно для удобства использования и запуска по крону с разными временными интервалами, что и надо будет сделать отдельно.
    Так же, советую предварительно перед бэкапом проверять смонтирован ли Ядиск, иначе место может внезапно закончится на сервере. Если интересно, то потом дам ссылку как это сделать.

    Бэкап

    1. Бэкап системы осуществляется при помощи команды tar
    Файл system_backup.sh:
    #!/bin/sh
    TIME=`date +%Y-%m-%d`
    # Что бэкапить
    WHAT=/
    # Куда класть бэкап
    WHERE=/home/backup/system
    # Куда копировать бэкап
    COPY=/mnt/yadisk/system
    # Бэкап системы. Файл бэкапа исключает системные каталоги и каталоги куда кладутся сами бэкапы
    tar -cpzf $WHERE/$TIME.tgz --exclude=/dev --exclude=/proc --exclude=/lost+found --exclude=/home/backup --exclude=/mnt /
    # Скопировать на файл бэкапа на Ядиск 
    cp $WHERE/$TIME.tgz $COPY
    ### Удалить старые файлы бэкапов
    # Оставить на VDS только последний
    find $WHERE -mtime +1 -print -delete
    # Удалить с Ядиска бэкапы месячной давности
    find $COPY -mtime +30 -print -delete


    2. Бэкап конфигов осуществляется так же при помощи команды tar (при текущих исходных данных все конфиги лежат в /etc)
    Файл etc_backup.sh:
    #!/bin/sh
    TIME=`date +%Y-%m-%d-%H:%M`
    WHAT=/etc
    WHERE=/home/backup/etc
    COPY=/mnt/yadisk/etc
    tar -cpzf $WHERE/$TIME.tgz $WHAT
    cp $WHERE/$TIME.tgz $COPY
    find $WHERE -mtime +1 -print -delete
    find $COPY -mtime +30 -print -delete


    3. Бэкап сайтов осуществляется аналогично (предполагаю, что они лежат в /var/www/)
    Файл www_backup.sh:
    #!/bin/sh
    TIME=`date +%Y-%m-%d-%H:%M`
    WHAT=/var/www
    WHERE=/home/backup/www
    COPY=/mnt/yadisk/www
    tar -cpzf $WHERE/$TIME.tgz $WHAT
    cp $WHERE/$TIME.tgz $COPY
    find $WHERE -mtime +1 -print -delete
    find $COPY -mtime +30 -print -delete


    4. Бэкап MySQL осуществляется при помощи команды mysqldump
    Файл mysql_backup.sh
    #!/bin/sh
    TIME=`date +%Y-%m-%d`
    # Логин пользователя мускула
    USER=root
    # Пароль пользователя мускула
    PASS=root_password
    WHERE=/home/backup/mysql
    COPY=/mnt/yadisk/mysql
    ### Базы которые надо бэкапить
    for base in base_name1 base_name2
    do
    # Сделать дамп баз
    mysqldump -u$USER -p$PASS -B $base > $WHERE/$base-$TIME.sql
    done
    cp $WHERE/$base-$TIME.sql $COPY
    find $WHERE -mtime +1 -print -delete
    find $COPY -mtime +30 -print -delete


    Восстановление

    Восстановление сайтов и конфигов осуществляется простым копированием в место назначения.
    Восстановление баз:
    mysql -u root -p root_password -f base_name1 < /home/backup/mysql/base_name1.sql
    mysql -u root -p root_password -f base_name2 < /home/backup/mysql/base_name2.sql


    Восстановление системы более сложный процесс, но суть сводится к одному - сделать чистую установку аналогичной ОС, загрузится с LIVE CD, подмонтировать Ядиск и распаковать архив в root директорию (root директорией называют корень файловой системы - / ), за исключением каталога /boot
    ОБЯЗАТЕЛЬНО заранее проделать восстановление на отдельной виртуалке.

    Вместо послесловия
    Такой бэкап, как говорится, и палкой не убить. Единственное, что надо делать - время от времени руками проверять архивы бэкапов на читаемость и прохождению нормального разархивирования. К сожалению, архивы бывают битыми.
    Ответ написан
    16 комментариев
  • Почему плывет верстка в zen, drupal?

    alexd73
    @alexd73 Автор вопроса
    Вопрос снят. Дело в компасе.. если что, вот решение https://www.drupal.org/node/2188263#comment-9105325
    Ответ написан
    Комментировать
  • Code Review Java?

    serso
    @serso
    Пожалуй начну жёсткую критику:
    1. Проект под мавеном — это хорошо, но плохо что он не поддерживает
    стандартную структуру каталогов проекта
    2. Config.parseConfiguration() — зачем самомоу парсить? Для этого есть уже написанные библиотеки типа Commons CLI для работы с коммандной строкой и Commons Configuration для хранения настроек (естественно, это можно заменить на что-нибудь другое но посыл, я думаю, понятен)
    3. Java code conventions нужно поддерживать — название класса isCloneable, имя пакета parserHandlers и
    private List<SuiteResult> _results;
    не есть хорошо
    4.
    if ( ... && command != -2)
    — это ад. Что значит константа -2?
    5. Нет такого слова Formater, нужно Formatter
    6.
    stringBuilder.append("[" + result.getTestSuiteName() + "]\r\n")
    — используете StringBuilder и зачем-то конкатенируете строки
    7.
    if (Config.isRunnable() == false)
    — так не пишут, используйте операцию отрицания.
    8. Вместо ParserHelper и статичных методов опишите интерфейс — мало ли откуда входные данные придётся парсить (Естественно, в качестве дефолтной реализации используйте свой код для парсинга из xml)
    9.
     public Command[] getCommands() {
            return commands.toArray(new Command[commands.size()]);
        }
    — почему бы список не возвращать? Вам действительно где-то нужен массив?
    10.
                        } catch (CloneNotSupportedException ex) {
    — выбрасывние CloneNotSupportedException — ошибра разработчиков java, с своих классах рекомендуется убирать из сигнатуры.

    Я думаю остановлюсь на этом. В плане архитектуры настоятельно рекомендую глянуть как реализована, например, библиотека jUnit
    Ответ написан
    1 комментарий