Quantcast
Channel: Библиотека знаний
Viewing all 1318 articles
Browse latest View live

Ошибки MySql/MariaDB - [Too many open files]

$
0
0

Ошибки MySql/MariaDB

Deadlock found when trying to get lock

SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
The SQL being executed was: UPDATE tbl_point
SET location = POINTFROMTEXT(CONCAT('POINT(55.683452 37.526923)'))

Для выяснения причины ошибки, необходимо запустить SHOW ENGINE INNODB STATUS;

No such file or directory

SQLSTATE[HY000] [2002] No such file or directory

Ошибка появляется при неверном указании сокета для драйвера PDO pdo_mysql.default_socket

Got error 28 from storage engin

Got error 28 from storage engine
  • Got error 28 from storage engine - Закончилось место на диске
  • MySQL Error: Out of resources when opening file './db_name/table_name.MYD' (Errcode: 24)

Checking for corrupt, not cleanly closed and upgrade needing tables

Checking for corrupt, not cleanly closed and upgrade needing tables
  • mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p
  • mysql_upgrade --force -u root -p

Too many open files

Can't read dir of '.' (errno: 24 "Too many open files")

Превышение одновременно открытых дескрипторов

Анализ состояния

  • Сколько разрешено открывать файловых дескрипторов пользователю mysql (системные ограничения)
  • # cat /etc/security/limits.conf | grep -vP '^#'

  • Сколько разрешено открывать файловых дескрипторов (конфигурация)
  • cat /etc/mysql/my.cnf|grep open_files_limit

  • Сколько занято дескрипторов
  • lsof -u mysql | wc -l

  • Cколько дескрипторов разрешено в MySQL
  • # mysql -se "show variables like 'open_files_limit'" -uroot -p
    Variable_name       Value
    open_files_limit    1024

Исправление

  • nano /etc/security/limits.conf
  • Воставляем число файловых дескрипторов (для пользователя mysql)
  • mysql           hard    nofile          102400
    mysql           soft    nofile          102400

  • Временно увеличиваем число открытых дескрипторов файлов
    (настройки сохраняются до перезагрузки машины)
    $ ulimit-n102400

  • Проверить настройки можно
    $ ulimit-a

  • nano /etc/mysql/my.cnf
  • Выставляем число одновременно открытых файлов в конфигурации
  • open_files_limit 8192

или

  • Выставляем число дескрипторов в разрешенных
  • echo 'mysql  -  nofile  8192' > /etc/security/limits.d/mysql.conf

  • Перезапускаем сервер
  • # service mysql restart

PAM (Аунтификация)

Если после перезапуска mysql не применил новые ограничения, значит PAM это запретил. Тогда добавляем разрешение в PAM.

  • Проверяем ограничения PAM
  • grep -r limits /etc/pam.*

  • Снимаем ограничение (Debian)
  • $ echo 'session required pam_limits.so' >> /etc/pam.d/common-session

  • $ echo 'session required pam_limits.so' >> /etc/pam.d/common-session-noninteractive

systemd (Менеджер загрузки)

  • Сбрасываем ограничения в systemd
  • echo "
    [Service]
    LimitNOFILE=infinity
    LimitMEMLOCK=infinity" > /etc/systemd/system/mysqld.service

  • Перезагружаем настройки демона systemd
  • systemctl reload mariadb.service

PHP - [Статьи /Модули / API / Интересные примеры кода]

$
0
0

PHP

Установка

5.4

$ apt-get install php5 php5-fpm dh-php5 php5-cgi php5-cli php5-common php5-curl php5-dev php5-gd php5-geoip php5-intl php5-json php5-mcrypt php5-memcache php5-memcached php5-mongo php5-mysql php5-readline php5-redis php5-sqlite php5-ssh2 php5-xcache php5-xsl

7.0

$ apt install php7.0 php7.0-fpm php7.0-common php7.0-curl php7.0-gd php7.0-intl php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-sqlite3 php7.0-xml php7.0-xsl php7.0-xdebug

7.1

$ apt install php7.1 php7.1-fpm php7.1-common php7.1-curl php7.1-gd php7.1-intl php7.1-mbstring php7.1-mcrypt php7.1-mysql php7.1-opcache php7.1-sqlite3 php7.1-xml php7.1-xsl php7.1-xdebug

Обновление с 7.0 на 7.1

$ apt install $(dpkg--get-selections|grep-v"deinstall"|grep php7.0|cut-f1|tr'\n'' '|tr'7.0''7.1')

Докуменация

Статьи /Модули / API / Интересные примеры кода

PhpDoc

  • @var tag
  • @return
  • @property type (string, integer)
  • @see tag
  • @inheritdoc
  • @author
  • @since

Поиск расширений

Errors / Ошибки

PHP inline

  • php -r 'echo md5("123");' - запуск с shell строки

Статьи/Модули

WEB crawling library for PHP / Парсеры PHP

REST Клиенты

Node Socket

Видеоуроки

Event-driven, non-blocking I/O with PHP - создано

PHP отладчик XDebug - [Более одного отладчика]

$
0
0

PHP отладчик XDebug

Подключение и настройка

nano ./xdebug.ini

zend_extension=xdebug.so

[debug]
xdebug.auto_trace=0
xdebug.collect_includes=1
xdebug.collect_params=1
xdebug.collect_return=0
;xdebug.default_enable=1
xdebug.extended_info=1
xdebug.show_local_vars=1
xdebug.show_mem_delta=1
xdebug.max_nesting_level=100

; trace
xdebug.trace_format=0
xdebug.trace_output_dir= "/var/log/php5-fpm/php-fpm-xdebug-trace"
xdebug.trace_options=0
xdebug.trace_output_name=timestamp

; debugger settings
xdebug.remote_autostart=0; 1 - Не требует XDEBUG_SESSION = xdebug в параметрах или куках, 0 - требует
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1; - отладка на локальной машине
xdebug.remote_host=192.168.1.6; - отладка на удаленной машине
xdebug.remote_mode=req
;xdebug.remote_mode = JIT
xdebug.remote_port=9000
xdebug.remote_log="/var/log/php5-fpm/php-fpm-xdebug-remote"
xdebug.idekey=xdebug

; profiler settings
xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir= "/var/log/php5-fpm/php-fpm-xdebug-profiler"
xdebug.profiler_output_name=profile.out

; Request
;xdebug.dump.GET=*
;xdebug.dump.REQUEST =*
;xdebug.dump.SERVER=HTTP_HOST, SERVER_NAME

Web XDebug

XDEBUG_SESSION_START=xdebug
XDEBUG_SESSION=xdebug

Console XDebug

$ exportPHP_IDE_CONFIG="serverName=www.host-name.ztc"&&exportXDEBUG_CONFIG="remote_host=192.168.1.6 idekey=xdebug"&& php7.0 ./yii

Где:

  • PHP_IDE_CONFIG - Наименование сервера из "Settings / Preferences | Languages & Frameworks | PHP | Servers"
    • Так-же желательно установить маппирование путей (локальных и на удаленном сервере)
  • XDEBUG_CONFIG
    • remote_host - IP Хоста, производящего отладку
    • idekey - Ключ, устанавливаемый в списке серверов "Settings / Preferences | Languages & Frameworks | PHP | Servers", "Ide key(session id)"

Хелпер для более одного отладчика

Если на сервере стоит более одного отладчика и в консоли по умолчанию, те в php.ini найденой по php -i, стоит другой отладчик в параметре zend_extension.

nano ~./.bashsrc

function phpx(){
export PHP_INI_SCAN_DIR=/etc/php5/cli-xdebug/conf.d && php -c /etc/php5/cli-xdebug/php.ini -q "$@";
}

и далее вызываем наш скрипт

phpx sample.php

Мульти соеденения

  • apt-get install php5-xdebug
  • cd /opt
  • mkdir pydbgpproxy
  • cd pydbgpproxy
  • wget https://github.com/Mirocow/pydbgpproxy/archive/master.zip ./ - Установить прокси (Python Remote Debugging Client)
  • unzip master.zip ./
  • echo "export PYTHONPATH=\${PYTHONPATH}:/opt/bin/pydbgpproxy/pythonlib" » ~/.bashrc
  • ln -s $(pwd)/pydbgpproxy /usr/local/bin/pydbgpproxy
  • запустить /usr/loca/bin/pydbgpproxy -i 0.0.0.0:9001 -d 9000
  • Установить уникальный ключ для хоста.

  • Зарегистрировать на сервере

nano ./xdebug.ini

; configuration for php xdebug module
; priority=20
zend_extension=xdebug.so

[debug]
xdebug.auto_trace=0
xdebug.collect_includes=1
xdebug.collect_params=1
xdebug.collect_return=0
;xdebug.default_enable=1
xdebug.extended_info=1
xdebug.show_local_vars=1
xdebug.show_mem_delta=1
xdebug.max_nesting_level=100

; trace
xdebug.trace_format=0
xdebug.trace_output_dir= "/var/log/php5-fpm/php-fpm-xdebug-trace"
xdebug.trace_options=0
xdebug.trace_output_name=timestamp

; debugger settings
xdebug.remote_autostart=0; 1 - Не требует XDEBUG_SESSION = xdebug в параметрах или куках, 0 - требует
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
;xdebug.remote_mode = JIT
xdebug.remote_port=9000
xdebug.remote_log="/var/log/php5-fpm/php-fpm-xdebug-remote"

; profiler settings
xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir= "/var/log/php5-fpm/php-fpm-xdebug-profiler"
xdebug.profiler_output_name=profile.out

Скрипт загрузки

nano /etc/init.d/pydbgpproxy.sh

#! /bin/sh
### BEGIN INIT INFO
# Provides:          Python Remote Debugging Client
# Required-Start:    $remote_fs dbus udev
# Required-Stop:     $remote_fs dbus udev
# Should-Start:      $syslog
# Should-Stop:       $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Python Remote Debugging Client
# Description:       Python Remote Debugging Client.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Python Remote Debugging Client"
NAME="pydbgpproxy"
DAEMON=/usr/local/bin/pydbgpproxy
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/pydbgpproxy.sh
DAEMON_OPTS="-i 0.0.0.0:9001 -d 9000"
DAEMON_LOG=/var/log/$NAME.log


# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

. /lib/lsb/init-functions

test -f /etc/default/pydbgpproxy && . /etc/default/pydbgpproxy

#
#       Function that starts the daemon/service.
# --background
d_start() {
        start-stop-daemon --oknodo --make-pidfile --start --quiet --pidfile $PIDFILE \
                --exec $DAEMON -- $DAEMON_OPTS 1>$DAEMON_LOG 2>&1 &
        return "$?"
}

#
#       Function that stops the daemon/service.
#
d_stop() {
        start-stop-daemon --stop --quiet --pidfile $PIDFILE
        return "$?"
}


case "$1" in
  start)
        if [ -f $PIDFILE ]; then
                echo "$NAME is running."
                exit 0
        fi
        log_daemon_msg "Starting $DESC" "$NAME"
        d_start
        case "$?" in
                0) log_end_msg 0 ;;
                1) log_progress_msg "already started"
                   log_end_msg 0 ;;
                *) log_end_msg 1 ;;
        esac
        ;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        d_stop
        case "$?" in
                0) log_end_msg 0 ;;
                1) log_progress_msg "already stopped"
                   log_end_msg 0 ;;
                *) log_end_msg 1 ;;
        esac
        if [ -f $PIDFILE ]; then
                rm $PIDFILE
        fi
        ;;
  restart|force-reload)
        $0 stop
        $0 start
        ;;
  status)
        status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
        exit 1
        ;;
esac

exit 0
# chmod 775 /etc/init.d/pydbgpproxy.sh
# chkconfig pydbgpproxy.sh on

Запуск в коде

ini_set('xdebug.profiler_enable', 1);
xdebug_enable();
xdebug_disable();
<?php
    xdebug_start_code_coverage();

    function a($a) {
        echo $a * 2.5;
    }

    function b($count) {
        for ($i = 0; $i < $count; $i++) {
            a($i + 0.17);
        }
    }

    b(6);
    b(10);

    var_dump(xdebug_get_code_coverage());
?>

Подробнее

Статьи

$
0
0

Статьи

2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01,
2016/12/02 03:18, , , ,
2015/10/13 12:01
2015/10/13 12:01, ,
2015/12/03 01:30, ,
2016/01/09 17:29,
2015/10/13 12:01, , ,
2015/10/13 12:01, , , , ,
2016/12/05 03:09, , , , , , ,
2015/10/13 12:01,
2015/10/13 12:01, , , , , , , , ,
2016/01/09 16:53, ,
2015/10/13 12:01, , ,
2015/10/13 12:01,
2016/01/18 18:01, ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01,
2017/01/01 18:21, , ,
2015/10/13 12:01,
2015/11/21 04:16, , , ,
2015/10/13 12:01,
2015/10/13 12:01, , , ,
2016/12/05 03:08, , , , , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , , ,
2017/01/05 02:38, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2017/02/27 14:45, , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2016/09/23 04:37, ,
2015/10/13 12:01, ,
2015/10/13 12:01
2015/10/13 12:01,
2016/02/17 02:28, , , ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2016/12/05 03:08, , , , , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , ,
2016/03/29 11:18, ,
2016/10/22 18:16, ,
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2016/05/15 18:38,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2017/03/15 01:43, ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, , , ,
2015/10/13 12:01,
2015/10/13 12:01, , , , , , ,
2015/10/13 12:01,
2015/10/13 12:01, , ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01,
2016/01/27 12:51,
2016/01/11 16:04
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/10/13 12:01, , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/11/13 18:36, , ,
2017/01/05 20:32, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2017/01/25 00:37, ,
2016/04/05 04:45, , , , ,
2016/10/22 18:28,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01
2015/10/13 12:01,
2015/10/13 12:01, , , , ,
2016/03/04 03:26, , , , ,
2016/02/16 17:28,
2015/10/13 12:01,
2015/10/13 12:01, , ,
2015/10/13 12:01, , ,
2017/01/25 21:38, ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01
2015/10/13 12:01,
2017/02/03 04:47, , , ,
2015/10/13 12:01, , , ,
2015/10/13 12:01,
2015/10/13 12:01, , ,
2015/10/13 12:01,
2016/08/18 01:51, , , ,
2015/10/13 12:01, ,
2016/03/05 18:46,
2017/02/12 18:55, , , ,
2016/01/12 13:49, ,
2015/10/13 12:01,
2015/10/13 12:01, , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, ,
2015/11/10 03:28, , , ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, , ,
2016/10/22 18:26,
2015/10/13 12:01,
2016/04/05 18:42, , , ,
2015/10/13 17:19, , , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, , , ,
2016/12/24 22:32,
2016/10/21 12:17,
2015/10/13 12:01
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/12/23 13:54,
2015/10/13 12:01,
2015/10/13 12:01
2016/04/28 18:02, , , ,
2016/09/10 18:12,
2015/10/13 12:01, , , , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , , ,
2016/08/23 00:42, , , ,
2015/10/13 12:01, , ,
2015/10/21 11:53, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2016/09/10 18:10,
2015/10/13 12:01, , , , , ,
2015/11/20 03:18, , ,
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/10/13 12:01,
2015/11/02 23:33,
2015/10/13 12:01, , ,
2015/10/13 12:01,
2015/10/13 12:01, , , , ,
2015/11/13 16:31, , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2015/10/13 12:01,
2017/01/24 00:02, ,
2016/12/05 03:47, , , , , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , , ,
2016/03/05 21:33, , , , , ,
2016/01/31 15:16, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2016/05/02 15:13, , ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , , , , , , , ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, , , , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , , , ,
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/10/13 12:01, , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , , ,
2016/03/30 11:47, , , , , ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, , , , ,
2016/04/04 16:08, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01,
2015/10/13 12:01, , , ,
2015/10/13 12:01,
2015/10/22 21:02, , , ,
2015/10/13 12:01, , , ,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2016/05/25 15:38, , , , ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/11/27 02:14, , , , ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01, , ,
2015/10/13 12:01, , , ,
2015/11/02 21:35, ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, , , , , ,
2015/10/13 12:01,
2015/10/13 12:01, , , , ,
2017/02/05 20:14,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01
2015/10/13 12:01, , ,
2015/10/21 11:54, , ,
2015/10/13 12:01
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01,
2016/02/02 03:43,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01,
2017/01/05 20:31, , ,
2016/07/12 05:20, , , , , ,
2016/02/09 03:35, ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/23 15:29,
2015/10/13 12:01, , , ,
2015/10/13 12:01, , , , , , , , , , , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01,
2015/10/13 12:01
2015/10/13 12:01,
2016/10/21 12:30, ,
2015/10/13 12:01, , ,
2015/10/13 12:01
2015/10/13 12:01, ,
2015/10/13 12:01, , , , , , ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/10/13 12:01, , , , , , , , ,
2015/10/13 12:01,
2015/10/13 12:01,
2016/01/31 15:45, ,
2016/10/26 10:47, , ,
2016/01/31 17:25, ,
2016/01/31 17:41, ,
2016/01/31 17:50, ,
2015/10/13 12:01, ,
2015/10/13 12:01,
2015/10/13 12:01, , , , ,
2015/10/13 12:01
2015/10/13 12:01, ,
2015/10/13 12:01
2016/01/31 18:04, ,
2015/10/13 12:01, , , , ,
2015/10/26 20:51, , ,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01, , , ,
2017/01/05 15:23, , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01,
2015/10/13 12:01,
2015/10/13 12:01,
2016/06/08 23:06, , ,
2016/01/31 18:00, ,
2015/10/13 12:01,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, ,
2016/10/22 18:18, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 17:21, ,
2015/10/13 12:01, , , , , , , , , ,
2015/10/13 12:01
2015/10/13 12:01
2015/10/13 12:01, ,
2016/10/22 18:29
2015/10/13 12:01, ,
2015/10/13 12:01
2015/10/13 12:01,
2015/10/13 12:01, , ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, , , , , , , ,
2015/10/13 12:01,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01,
2016/01/12 12:21,
2016/01/31 15:52, ,
2016/01/31 15:31, ,
2016/01/31 16:04, ,
2016/01/31 17:31, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01,
2015/10/13 12:01, , ,
2015/10/13 12:01,
2016/02/26 00:38, , , , , , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , ,
2015/10/13 13:33, , , ,
2015/10/13 12:01, , ,
2015/10/13 12:01, ,
2015/10/13 12:01, ,
2015/10/13 12:01, , , , , , , , ,
2015/10/13 12:01,
2015/10/13 12:01, ,
2015/10/13 12:01, , ,
2016/01/31 15:13, ,
2017/01/24 23:18, , ,
2016/10/22 18:40, ,
2015/10/21 14:45, , , ,
2016/02/11 18:45, , , ,
2015/10/13 12:01
2015/12/19 21:17, , ,
2015/10/13 12:01,
2015/12/19 21:32, , ,
2015/12/19 21:50, , ,
2015/10/13 12:01, , , , ,
2015/10/13 12:01, , , ,
2015/10/13 12:01, , , , , ,
2015/10/13 12:01, ,
2016/02/10 01:43,
2015/10/13 12:01, , ,
2016/09/22 12:34, , ,

Документация по Yii 2 Framework - [Behaviors/Filters]

$
0
0

Документация по Yii 2 Framework

Configuration

<?phpreturn['components'=>['db'=>['class'=>'yii\db\Connection','dsn'=>'mysql:host=localhost;dbname=yii2','username'=>'yii2','password'=>'<password>',],'cache'=>['class'=>'yii\caching\DummyCache',],'urlManager'=>['rules'=>['<action:(login|logout|about)>'=>'site/<action>', 
                // ... 
                ['class'=>'app\components\CarUrlRule','connectionID'=>'db',...],],'enablePrettyUrl'=>true,'enableStrictParsing'=>true,'showScriptName'=>false,'suffix'=>'.html',],]];

URL Management

echo \Yii::$app->urlManager->createUrl(['site/page','id'=>'about']);// /index.php/site/page/id/about/echo \Yii::$app->urlManager->createUrl(['date-time/fast-forward','id'=>105])// /index.php?r=date-time/fast-forward&id=105echo \Yii::$app->urlManager->createAbsoluteUrl('blog/post/index');// http://www.example.com/index.php/blog/post/index/
$route=[// ... path + params]; 
$url= \Yii::$app->urlManager;$url->createUrl($route);$url->createAbsoluteUrl($route); 
$url= Yii::$app->urlManager->createUrl($route);$url= Yii::$app->urlManager->createAbsoluteUrl($route);

Конфигурация

<?phpreturn[// ...'components'=>['urlManager'=>['enablePrettyUrl'=>true,'showScriptName'=>false,'enableStrictParsing'=>true,'suffix'=>'.html','rules'=>['<action:(login|logout|about)>'=>'site/<action>', 
                // ... 
                ['class'=>'app\components\CarUrlRule','connectionID'=>'db',...],],],],];

Url

yii\helpers\Url::toRoute

echo Url::toRoute([''],$schema=false);// currently active routeecho Url::toRoute(['view','id'=>'contact'],$schema=false);// same controller, different actionecho Url::toRoute(['post/index'],$schema=false);// same module, different controller and actionecho Url::toRoute(['/site/index'],$schema=false);// absolute route no matter what controller is making this callecho Url::toRoute(['post/read','id'=>100,'#'=>'title'],$schema=false)
echo Url::toRoute('',$schema=false);// currently active routeecho Url::toRoute('post/index',$schema=false);// same module, different controller and actionecho Url::toRoute('/site/index',$schema=false);// absolute route no matter what controller is making this call

yii\helpers\Url::to

echo Url::to('',$schema=false);// currently active routeecho Url::to('post/index',$schema=false);// same module, different controller and actionecho Url::to('/site/index',$schema=false);// absolute route no matter what controller is making this call
echo Url::to('@web',$schema=false);echo Url::canonical();// get canonical URL for the curent pageecho Url::home();// get home URLecho Url::remember();// save URL to be used laterecho Url::previous();// get previously saved URL
  • $schema = true - Абсолютный адрес
  • $schema = 'https' - Указание на испоользование шифрованного протокола

Синоним для yii\helpers\Url::toRoute

echo Url::to([''],$schema=false);// currently active routeecho Url::to(['view','id'=>'contact'],$schema=false);// same controller, different actionecho Url::to(['post/index'],$schema=false);// same module, different controller and actionecho Url::to(['/site/index'],$schema=false);// absolute route no matter what controller is making this callecho Url::to(['post/read','id'=>100,'#'=>'title'],$schema=false)

Примеры использоватия можно глянуть в тестах https://github.com/yiisoft/yii2/blob/master/tests/unit/framework/helpers/UrlTest.php

yii\helpers\Html::url (old)

echo Html::url(['']);// currently active routeecho Html::url(['view','id'=>'contact']);// same controller, different actionecho Html::url(['post/index']);// same module, different controller and actionecho Html::url(['/site/index']);// absolute route no matter what controller is making this callecho Html::url(['post/read','id'=>100,'#'=>'title'])
echo Html::url('');// currently active routeecho Html::url('post/index');// same module, different controller and actionecho Html::url('/site/index');// absolute route no matter what controller is making this call

вместо старых методов нада использовать yii\helpers\Url::to

Примеры использоватия можно глянуть в тестах https://github.com/yiisoft/yii2/blob/master/tests/unit/framework/helpers/UrlTest.php

createUrl

echo$this->createUrl([''],$schema=null);// currently active routeecho$this->createUrl(['view','id'=>'contact'],$schema=null);// same controller, different actionecho$this->createUrl(['post/index'],$schema=null);// same module, different controller and actionecho$this->createUrl(['/site/index'],$schema=null);// absolute route no matter what controller is making this callecho$this->createUrl(['post/read','id'=>100,'#'=>'title'],$schema=null)
echo$this->createUrl('',$schema=null);// currently active routeecho$this->createUrl('post/index',$schema=null);// same module, different controller and actionecho$this->createUrl('/site/index',$schema=null);// absolute route no matter what controller is making this call

createAbsoluteUrl (old)

Усли $this - это yii\web\Controller

echo$this->createAbsoluteUrl([''],$schema=null);// currently active routeecho$this->createAbsoluteUrl(['view','id'=>'contact'],$schema=null);// same controller, different actionecho$this->createAbsoluteUrl(['post/index'],$schema=null);// same module, different controller and actionecho$this->createAbsoluteUrl(['/site/index'],$schema=null);// absolute route no matter what controller is making this callecho$this->createAbsoluteUrl(['post/read','id'=>100,'#'=>'title'],$schema=null)

вместо старых методов надо использовать yii\helpers::toRoute

Усли $this - это yii\web\Controller

echo$this->createAbsoluteUrl('',$schema=null);// currently active routeecho$this->createAbsoluteUrl('post/index',$schema=null);// same module, different controller and actionecho$this->createAbsoluteUrl('/site/index',$schema=null);// absolute route no matter what controller is making this call

вместо старых методов надо использовать yii\helpers::toRoute

Request

GET

Yii::$app->request->get();
Yii::$app->request->getQueryParams();
Yii::$app->request->getQueryParam('File');
Yii::$app->request->get('File');

POST

Yii::$app->request->post();
Yii::$app->request->getBodyParams();
Yii::$app->request->getBodyParam('File');
Yii::$app->request->post('File');

View

CSS

$this->registerCssFile();

JS

$this->registerJsFile();

Вставка кода внутри представления

В примере производится вставка JS кода из assets c применением переменной в скрипте JS_FABRIC_CAR_URL

$this= Yii::$app->view;
<?php$this->registerJs('var JS_FABRIC_CAR_URL = "'. Html::url(['/core/ajax/fabric-car']).'";', View::POS_HEAD,'js-fabric-car-url');$publish= Yii::$app->assetManager->publish(Yii::getAlias('@app/modules/core/assets/js'));$this->registerJsFile($publish[1].'/block-select-car.js',[yii\web\JqueryAsset::className()],['position'=>View::POS_END]);?>

assetManager

'components'=>['assetManager'=>['class'=>'yii\web\AssetManager','forceCopy'=>true,],],
  • forceCopy - Включает постоянное обновление асетов

через ajaxSetup

Добавление csrfToken в Ajax запрос (Yii2)

$js_global_variables='
$.ajaxSetup({
        data: '. \yii\helpers\Json::encode([
            \yii::$app->request->csrfParam=> \yii::$app->request->csrfToken,]).'
    });'. PHP_EOL;$this->registerJs($js_global_variables, yii\web\View::POS_HEAD,'js_global_variables');

или через header

$js_global_variables='
$.ajaxPrefilter(function( options ) {
    if ( !options.beforeSend) {
        options.beforeSend = function (xhr) { 
            xhr.setRequestHeader("HTTP_X_CSRF_TOKEN", '. \yii::$app->request->csrfToken.');
        }
    }
});'. PHP_EOL;$this->registerJs($js_global_variables, yii\web\View::POS_HEAD,'js_global_variables');

или через JQuery

      $.ajax({
        url: 'http://site?controller/action',
        type: 'post',
        data: {payload: payload, _csrf: yii.getCsrfToken()},        
        dataType: 'json',
      }).success(function(response) {
      });

Form

Ajax

Pjax

use app\modules\cabinet\components\CabinetController;use app\models\Image; 
class CameraController extends CabinetController
{publicfunction actionFavorite(){$id=(int) Yii::$app->request->post('id'); 
        if(!$id){returnfalse;} 
        $image= Image::findOne($id); 
        if($image->f_fav){
            Image::updateAll(['f_fav'=>0],['id'=>$id]);return$this->renderPartial('favorite',['id'=>$id,'f_fav'=>0]);}else{
            Image::updateAll(['f_fav'=>1],['id'=>$id]);return$this->renderPartial('favorite',['id'=>$id,'f_fav'=>1]);} 
        returnfalse;}}

Вывод партиала в main.php

<?=$this->render('favorite',['id'=>1,'f_fav'=>true);?>

Отображаемая вьюха favorite.php

<?phpuse yii\widgets\Pjax;use yii\helpers\Html;?><?php Pjax::begin();?><?= Html::beginForm(['favorite'],'post',['data-pjax'=>'','class'=>'form-inline']);?><?= Html::hiddenInput('id',$id)?><?= Html::submitButton($f_fav ? '<i class="fa fa-star"></i>':'<i class="fa fa-star-o"></i>',[])?><?= Html::endForm()?><?php Pjax::end();?>

Виджеты / Widgets

Model / AR / DAO / Запросы к БД

Как получить модель из модуля

$user= Yii::$app->getModule("user")->model("User",["scenario"=>"register"]);$profile= Yii::$app->getModule("user")->model("Profile");

Active Record

class Post extends ActiveRecord
{publicfunction getCreator(){return$this->hasOne('User',array('id'=>'user_id'));}publicfunction getComments(){return$this->hasMany('Comment',array('post_id'=>'id'));}publicfunction getTrustComments($isTrust=true){return$this->hasMany('Comment',array('post_id'=>'id'))->where('status = :status',array(':status'=>$isTrust ? self::TRUST:self::UNTRUST,))->orderBy('id');}}
$price= PriceItem::find()->select(['price','create_time'=>'DATE_FORMAT(create_time, "%d.%m.%Y")'])->where(['and',['price_list_form_id'=>$price_list_form_ids],['>','create_time','2015.01.01']])->orderBy(['price'=> SORT_ASC])->asArray()->one();
// we receive an ActiveQuery instance$query= Post::find(); 
// all posts$posts=$query->all(); 
// looking for all the posts with a condition$posts=$query->where(array('status'=> Post::DRAFT))->orderBy('time')->all(); 
// looking for a post $post=$query->where(array('id'=>10,'status'=> Post::READ))->one(); 
// or easier: "where" condition can be transmitted directly to the factory method$post= Post::find(array('id'=>10,'status'=> Post::READ)); 
// having transmitted to the factory method not a massive, but a number equivalent to the primary key search $post= Post::find(10)->where(array('status'=> Post::READ))->one(); 
// we index the result to a necessary attribute$posts=$query->indexBy('title')->all(); 
// the result as an array$posts=$query->asArray()->all();

Ключи в эллементах коллекции AR

$query= SparesCategory::find()->where(['parent_id'=>0]);$query->indexBy=function($row){// Ключ в который будет помещена возвращаемая модельreturn$row->id;};$categories=$query->all();
$quey= CarMark::find()->indexBy(function($row){return$row->id;})->all();

Создание модели из возвращаемы данных Command (с помощью populateRecord())

$sql="SELECT * FROM `tbl_spares_category` c
            LEFT JOIN tbl_form_spares_category fc ON fc.category_id = c.id
            WHERE fc.form_id = :form_id AND fc.category_id = :category_id";$select_marks= Yii::$app->db->createCommand($sql,[':form_id'=>$form_id,':category_id'=>$category_id,])->queryAll(); 
        foreach($marksas$row){ 
            // Only yii2 alpha//$mark = SparesCategoryForm::create($row); 
            $mark=new SparesCategoryForm;
            SparesCategoryForm::populateRecord($mark,$row); 
 
            if(isset($mark->id)){ 
              // do somethig 
            }}

Join

with()

Не делает SQL JOIN(), применяется не только в реляционых БД (NoSql) Применяется только для построений конструкций вида WHERE IN(), плюс наполняют relation

leftJoin()

Добавляет SQL LEFT JOIN(), применяется только в реляционыых БД, плюс наполняют relation

$this->joinWith([[relation_name]],true,'LEFT JOIN')

joinWith()

Добавляет SQL JOIN(), применяется только в реляционыых БД, плюс наполняют relation

// Выбираем MyModel с relation1 и relation2.// Все три забираем запросом с JOIN.$query= MyModel::find()->joinWith(['relation1','relation2']); 
$countQuery= clone $query;$pages=new Pagination(['totalCount'=>$countQuery->count(),'pageSize'=>15]); 
$items=$query->orderBy($sort->orders)->offset($pages->offset)->limit($pages->limit)// Забираем дополнительно relation3 и relation4.// Фильтровать по ним нам не нужно, так что будут// запросы вида WHERE ID IN (1,2,3,4) или аналоги// для noSQL.->with(['relation3','relation4'])->all();

https://github.com/yiisoft/yii2/blob/master/docs/guide/active-record.md#joining-with-relations

innerJoinWith()

Validate (Rules)

class User extends \yii\db\ActiveRecord
{// ... 
    publicfunction rule(){return[['attribute1','attribute2',...],'validator class or alias',// specifies in which scenario(s) this rule is active.// if not given, it means it is active in all scenarios'on'=>['scenario1','scenario2',...],// the following name-value pairs will be used// to initialize the validator properties'property1'=>'value1','property2'=>'value2',// ...];} 
}

Пример использования в модели

if($User->load($_POST)){ 
      $User=new User;$Profile=new Profile; 
      // validate for ajax request$Profile->load($_POST);if(Yii::$app->request->isAjax){
          Yii::$app->response->format= Response::FORMAT_JSON;return ActiveForm::validate($User,$Profile);} 
      // validate for normal requestif($User->validate() and $Profile->validate()){// do somthing}}

Пример применения валидатора без использования модели

$email='test@example.com';$validator=new yii\validators\EmailValidator();if($validator->validate($email,$error)){echo'Email is valid.';}else{echo$error;}

Scenario

class User extends \yii\db\ActiveRecord
{// ... 
    publicfunction getProduct(){return$this->hasOne(Order::className(),['product_id'=>'id']);} 
    publicfunction scenarios(){return['userCreates'=>['attributes'=>['name','value'],'atomic'=>[self::OP_INSERT],],];} 
    publicfunction afterSave($insert){
        parent::afterSave($insert);if($this->getScenario()===='userCreates'){// FIXME: TODO: WIP, TBD}}}

Подробноhttps://github.com/yiisoft/yii2/blob/master/docs/guide/structure-models.md#scenarios-

Relation

class Customer extends \yii\db\ActiveRecord
{//publicfunction getOrders(){return$this->hasMany(Order::className(),['customer_id'=>'id']);} 
    //publicfunction getBigOrders($threshold=100){return$this->hasMany(Order::className(),['customer_id'=>'id'])->where('subtotal > :threshold',[':threshold'=>$threshold])->orderBy('id');} 
    // Вытащить данные из таблицы модели Item, используя связи из таблицы tbl_order_itempublicfunction getItems(){// Получить данные через таблицу tbl_order_itemreturn$this->hasMany(Item::className(),['id'=>'item_id'])->viaTable('tbl_order_item',['order_id'=>'id']);} 
    //public static function olderThan($query,$age=30){$query->andWhere('age > :age',[':age'=>$age]);}}
$customer= Customer::find(1);$orders=$customer->orders;$orders=$customer->getBigOrders(200)->all();$customers= Customer::find()->olderThan(50)->all();
$customer= Customer::find(1);$order=new Order();$order->comment='';$customer->link('orders',$customer);

Events

class Post extends ActiveRecord
{publicfunction init(){$this->on('beforeAction',function($event){// отменяем действие$event->isValid=false;});}}
$component->on('beforeAction',$handler);

Как получить SQL и Параметры из ActiveQuery

$query= Post::find()->where(array('id'=>10,'status'=> Post::READ))->createCommand(); 
// SQLecho$query->sql 
// Params:print_r($query->params)

Объекты доступа к данным (Data Access Objects, DAO)

Соеденение

Методы запроса

  • queryOne()
  • queryAll()
  • query()
  • queryScalar()
  • queryColumn()

Подробноhttps://github.com/yiisoft/yii2/blob/master/framework/db/Command.php

createCommand
$command=$connection->createCommand('SELECT * FROM tbl_post WHERE id=1');$post=$command->queryOne();
$connection->createCommand()->insert('tbl_user',['name'=>'Sam','age'=>30,])->execute();
$command=$connection->createCommand('UPDATE tbl_post SET status=1 WHERE id=1');$command->execute();
$connection->createCommand()->batchInsert('tbl_user',['name','age'],[['Tom',30],['Jane',20],['Linda',25],])->execute();
$connection->createCommand()->update('tbl_user',['status'=>1],'age > 30')->execute();
$connection->createCommand()->delete('tbl_user','status = 0')->execute();
$command=$connection->createCommand('SELECT * FROM tbl_post WHERE id=:id');$command->bindValue(':id',$_GET['id']);$post=$command->query();

Построитель запросов (Query Builder and Query)

$rows=(new \yii\db\Query())->select('id, name')->from('user')->limit(10)->all(); 
// which is equivalent to the following code: 
$query=(new \yii\db\Query())->select('id, name')->from('user')->limit(10); 
// Create a command. You can get the actual SQL using $command->sql$command=$query->createCommand(); 
// Execute the command:$rows=$command->queryAll();
$query=(new \yii\db\Query())->select('id, name')->from('user')->limit(10); 
// Create a command. You can get the actual SQL using $command->sql$command=$query->createCommand(Yii::$app->db); 
// Execute the command:$rows=$command->queryAll();

Простой спооб получить записи из указанной БД

$rows=(new \yii\db\Query())->select('id, name')->from('user')//->where([...])//->innerJoin('', '', [...])->limit(10)->createComand(Yii::$app->some_bd)->queryAll();

Подробно

Transactions

$transaction=$connection->beginTransaction();
try {$connection->createCommand($sql1)->execute();$connection->createCommand($sql2)->execute();// ... executing other SQL statements ...$transaction->commit();} catch(Exception $e){$transaction->rollback();}

Batch

Batch

foreach(Customer::find()->batch()as$customers){ 
} 
foreach(Customer::find()->batch(10)as$customers){// $customers — массив из 10 или менее объектов Customer}
$rows=[]; 
foreach($modelsas$model){if(!$model->validate()){// At least one model has invalid data 
        break;} 
    $rows[]=$model->attributes;}$rows=  \yii\helpers\ArrayHelper::getColumn($models,'attributes;');$postModel=new Post; 
Yii::$app->db->createCommand()->batchInsert(Post::tableName(),$postModel->attributes(),$rows)->execute();

Each

foreach(Customer::find()->each()as$customers){ 
} 
foreach(Customer::find()->each(10)as$customers){// $customers — массив из 10 или менее объектов Customer}

Controller

Как программно вызвать контроллер?

$className='backend\controllers\SiteController';$controller= Yii::createObject($className,[$id,$this]);

yii\helpers\Html (old)

// ['label' => 'Добавление', 'url' => ['/admin/user/create']]
Html::a("Log in here",["user/reset","hash"=>$hash,"sid"=>$sid]);
Html::url(["user/reset","hash"=>$hash,"sid"=>$sid]);

Подробноhttps://github.com/yiisoft/yii2/blob/master/docs/guide/url.md

Module

Submodule

Для работы сабмодуля, необходимо выполнить его подключение, через указание submodule namespace модуля

namespace mirocow\eav; 
class Module extends \yii\base\Module { 
    // ...publicfunction init(){ 
      // .. 
      $this->setModule('admin','yii\user\modules\admin\Module');} 
    // Пример перенаправления роута в саб модуль adminpublicfunction createController($route){ 
        return$this->getModule('admin')->createController(str_replace('admin/','',$route)); 
    } 
}

Helpers

Behaviors/Filters

publicfunction behaviors(){returnarray('access'=>array('class'=>'yii\web\AccessControl','rules'=>array(array('allow'=>true,'actions'=>array('admin'),'roles'=>array('@')),array('allow'=>false),),),);}

Behaviors/Date

publicfunction behaviors(){return[['class'=> TimestampBehavior::className(),'createdAtAttribute'=>'create_time',//'updatedAtAttribute' => 'update_time','value'=>new Expression('NOW()'),],];}

Session

Yii::$app->session->get('key');
Yii::$app->session->set('key','value');

setFlash

В контролере

Yii::$app->session->setFlash('info',$shell->output);return$this->redirect('/site');

return делать обязательно. инчаче после редиректа сообщение не выведется

Вывод стандартным способом

<?phpforeach(Yii::$app->session->getAllFlashes()as$key=>$message){echo'<div class="alert alert-'.$key.'">'.$message.'</div>';}?>

Вывод с помощью виджета loveorigami/yii2-notification-wrapper

<?= Wrapper::widget(['layerClass'=>'lo\modules\noty\layers\Noty',]);?>

Данный виджет поддерживает большое кол-во виджетов обображения таких как:

Library (Layer) Bower Project homepage Docs
Bootstrap Alert - http://getbootstrap.com/components/#alerts docs/Alert.md
Bootstrap Notify remarkable-bootstrap-notify https://github.com/mouse0270/bootstrap-notify docs/BootstrapNotify.md
Growl jquery-growl https://github.com/ksylvest/jquery-growl docs/Growl.md
iGrowl igrowl https://github.com/catc/iGrowl docs/Igrowl.md
jQuery Notify jquery.notify https://github.com/CreativeDream/jquery.notify docs/JqueryNotify.md
jQuery Notify Bar jqnotifybar https://github.com/dknight/jQuery-Notify-bar docs/JqueryNotifyBar.md
jQuery Toaster jquery.toaster https://github.com/scottoffen/jquery.toaster docs/JqueryToaster.md
jQuery Toast Plugin jquery-toast-plugin https://github.com/kamranahmedse/jquery-toast-plugin docs/JqueryToastPlugin.md
Lobibox lobibox https://github.com/arboshiki/lobibox docs/Lobibox.md
Notie notie https://github.com/jaredreich/notie docs/Notie.md
Notific8 notific8 https://github.com/ralivue/notific8 docs/Notific8.md
NotifIt notifit https://github.com/naoxink/notifIt docs/NotifIt.md
Notify.js notifyjs https://github.com/notifyjs/notifyjs docs/Notifyjs.md
Noty noty https://github.com/needim/noty docs/Noty.md
PNotify pnotify https://github.com/sciactive/pnotify docs/PNotify.md
Sweetalert sweetalert https://github.com/t4t5/sweetalert docs/Sweetalert.md
Toastr toastr https://github.com/CodeSeven/toastr docs/Toastr.md

Console

IsConsole

if(Yii::$app->request->isConsoleRequest){//}

User

RBAC

Access

'access'=>['class'=> \yii\web\AccessControl::className(),'rules'=>[['actions'=>['index'],'allow'=>false,'roles'=>['?'],],['actions'=>['index','update','view','create','delete'],'allow'=>true,'matchCallback'=>function(){return \Yii::$app->user->identity->role<= \Yii::$app->user->identity->MANAGER;}],],],

Components

Создание объекта компанента

$object= Yii::createObject(array('class'=>'MyClass','property1'=>'abc','property2'=>'cde',),$param1,$param2);

Theme

'view'=>array('theme'=>array('pathMap'=>array('@app/views'=>'@webroot/themes/basic'),'baseUrl'=>'@www/themes/basic',),),

Cache

// Создать зависимость от времени модификации файла example.txt.$dependency=new \yii\caching\FileDependency(['fileName'=>'example.txt']); 
// Данные устаревают через 30 секунд.// Данные могут устареть и раньше, если example.txt будет изменён.$cache->set($key,$data,30,$dependency); 
// Кэш будет проверен, если данные устарели.// Он также будет проверен, если указанная зависимость была изменена.// Вернется false, если какое-либо из этих условий выполнено.$data=$cache->get($key);

Зависимости

  • yii\caching\ChainedDependency: зависимость меняется, если любая зависимость в цепочке изменяется;
  • yii\caching\DbDependency: зависимость меняется, если результат некоторого определенного SQL запроса изменён;
  • yii\caching\ExpressionDependency: зависимость меняется, если результат определенного PHP выражения изменён;
  • yii\caching\FileDependency: зависимость меняется, если изменилось время последней модификации файла;
  • yii\caching\TagDependency: Связывает кэшированные данные элемента с одним или несколькими тегами. Вы можете аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. invalidate();

Кэширование запросов

$result=$db->cache(function($db){ 
    // Результат SQL запроса будет возвращен из кэша если// кэширование запросов включено и результат запроса присутствует в кэшеreturn$db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne(); 
}); 
$result= Customer::getDb()->cache(function($db){return Customer::find()->where(['id'=>1])->one();});
$duration=60;// кэширование результата на 60 секунд$dependency=...;// параметры зависимости 
$result=$db->cache(function($db){ 
    // ... выполнять SQL запросы здесь ... 
    return$result; 
},$duration,$dependency);
$result=$db->cache(function($db){ 
    // SQL запросы, которые используют кэширование 
    $db->noCache(function($db){ 
        // SQL запросы, которые не используют кэширование 
    }); 
    // ... 
    return$result;});
// использовать кэширование запросов и установить срок действия кэша на 60 секунд$customer=$db->createCommand('SELECT * FROM customer WHERE id=1')->cache(60)->queryOne();
$result=$db->cache(function($db){ 
    // Используется кэширование SQL запросов 
    // не использовать кэширование запросов для этой команды$customer=$db->createCommand('SELECT * FROM customer WHERE id=1')->noCache()->queryOne(); 
    // ... 
    return$result;});

Локализация - i18N/intl

apt=get install php5-intl

Перевод (локализация проекта)

PHPUnit

добавить в конфигуратор композера composer.json

{
    "require-dev": {
        "phpunit/phpunit": "3.7.*"
    }
}
  • php composer.phar update
  • php vendor/bin/phpunit vendor/yiisoft/yii2/yii/test/

Статьи

Описание

PHPOffice

Мини документация

$
0
0

Мини документация

Init

  • mkdir new_repo1 && cd new_repo1 && git init
  • mkdir new_repo1 && cd new_repo1 && git init --bare origin

Config

Global

  • git config --global user.name "Your Name"
  • git config --global user.email "your_email@whatever.com"
  • git config --global core.filemode false

User

  • git config core.bare false - Делаем из bare репозитория обычный
  • git config core.filemode false

Clone

  • git clone git@github.com/repo.git
  • git clone --no-hardlinks origin master
  • git clone --no-hardlinks ./repo1 ./repo2

Add

  • git add Копирует файлы (в их текущем состоянии) на сцену.
  • git commit Сохраняет снимок сцены в виде коммита.
  • git reset -- Восстанавливает файлы на сцене, а именно копирует файлы из последнего коммита на сцену. Используйте эту команду для отмены изменений, внесенных командой git add файлы. Вы также можете выполнить git reset чтобы восстановить все файлы на сцене.
  • git checkout -- Копирует файлы со сцены в рабочую директорию. Эту команду удобно использовать чтобы сбросить нежелательные изменения в рабочей директории.

Вы можете использовать git reset -p, git checkout -p, и git add -p вместо (или вместе с) именами файлов, чтобы в интерактивном режиме выбирать, какие именно изменения будут скопированы.

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

Commit

  • git commit -a аналогичен запуску двух команд: git add для всех файлов, которые существовали в предыдущем коммите, и git commit.
  • git commit Создает новый коммит, в основе которого лежат уже существующие файлы, добавляя изменения только для указанных файлов. Одновременно, указанные файлы будут скопированы на сцену.
  • git checkout HEAD -- Копирует файлы из текущего коммита и на сцену, и в рабочую директорию.

Diff

Commit

amend (Перезаписать последний комит)

Если вы сделали ошибку в последнем коммите, её легко исправить с помощью команды git commit --amend. Эта команда создает новый коммит, родителем которого будет родитель ошибочного коммита. Старый ошибочный коммит будет отброшен, конечно же если только на него не будет ещё каких-либо других ссылок, что маловероятно.

Checkout

Команда checkout используется для копирования файлов из истории или сцены в рабочую директорию. Также она может использоваться для переключения между ветками.

Когда вы указываете имя файла (и/или ключ -p), git копирует эти файлы из указанного коммита на сцену и в рабочую директорию. Например, git checkout HEAD~ foo.c копирует файл foo.c из коммита HEAD~ (предка текущего коммита) в рабочу директорию и на сцену. Если имя коммита не указано, то файл будет скопирован со сцены в рабочую директорию. Обратите внимание на то что при выполнении команды git checkout HEAD~ foo.c позиция указателя текущей ветки (HEAD) остаётся прежней, указатель никуда не перемещается.

В том случае если мы не указываем имя файла, но указываем имя (локальной) ветки, то указатель HEAD будет перемещен на эту ветку (мы переключимся на эту ветку). При этом сцена и рабочая директория будут приведены в соответствие с этим коммитом. Любой файл, который присутствует в новом коммите (a47c3 ниже) будет скопирован из истории; любой файл, который был в старом коммите (ed489), но отсутствует в новом, будет удален; любой файл, который не записан ни в одном коммите, будет проигнорирован.

В том случае, если мы не указываем имя файла, и не указываем имя (локальной) ветки, а указываем тег, дистанционную (remote) ветку, SHA-1 хеш коммита или что-то вроде master~3, то мы получаем безымянную ветку, называемую «Detached HEAD» (оторванная голова). Это очень полезная штука, если нам надо осмотреться в истории коммитов. К примеру, вам захочется скомпилировать git версии 1.6.6.1. Вы можете набрать git checkout v1.6.6.1 (это тег, не ветка), скомпилировать, установить, а затем вернуться в другую ветку, скажем git checkout master. Тем не менее, коммиты из состояния «Detached HEAD» происходят по своим особым важным правилам

Коммит из состояния «Detached HEAD»

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

Если после такого коммита вы переключитесь в ветку master, то коммит 2eecb, совершенный из состояния «Detached HEAD» потеряется и попросту будет уничтожен очередной сборкой мусора только потому нет ни одного объекта, который бы на него ссылался: ни ветки, ни тега.

В том случае, если вы хотите сохранить этот коммит на будущее, вы можете создать на основе его новую ветку командой git checkout -b new.

Reset

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

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

Если имя коммита не будет указано, по умолчанию оно будет HEAD. В этом случае указатель ветки не будет перемещен, но сцена (а также и рабочая директория, если был использован ключ --hard) будут приведены к состоянию последнего коммита.

<fc #008080>Если в команде указано имя файла (и/или ключ -p), то команда работает также как checkout с именем файла</fc>, за исключением того, что только сцена (но не рабочая директория) будет изменена. Если вы подставите имя коммита на место двойной черты, вы сможете получить состояние файла из этого коммита, тогда как в случае с двойной чертой вы получите состояние файла из коммита, на который указывает HEAD.

Checkout VS Reset

Merge

Команда merge (слияние) создает новый коммит на основе текущего коммита, применяя изменения других коммитов. Перед слиянием сцена должна быть приведена в соответствие с текущим коммитом. Самый простой случай слияния — это когда другой коммит является предком текущего коммита: в этом случае ничего не происходит. Другой простой случай слияния — когда текущий коммит является предком другого коммита: в этом случае происходит быстрая перемотка (fast-forward). Ссылка текущей ветки будет просто перемещена на новый коммит, а сцена и рабочая директория будут приведены в соответствие с новым коммитом.

Во всех других случаях выполняется «настоящее» слияние. Вы можете изменить стратегию слияния, но по умолчанию будет выполнено «рекурсивное» слияние, для которого будет взят текущий коммит (ed489 ниже на схеме), другой коммит (33104) и их общий предок (b325c); и для этих трех коммитов будет выполнено трехстороннее слияние. Результат этого слияние будет записан в рабочую директорию и на сцену, и будет добавлен результирующий коммит со вторым родителем (33104).

Cherry Pick

Команда cherry-pick («вишенка в тортике») создает новый коммит на основе только одного сладкого «коммита-вишенки», применив все его изменения и сообщение.

Rebase

Если находясь в ветке master выполнить git merge next, мы получим историю изменений раздваивающуюся после коммита на 2 ветви и заканчивающуюся автоматическим слиянием веток, родителями этого merge-коммита будут ревизии C (из master’а) и F (из бранча next). Избежать подобной ветвистости помогает волшебная команда git rebase.

Перебазирование (rebase) — это альтернатива слиянию для задач объединения нескольких веток. Если слияние создает новый коммит с двумя родителями, оставляя нелинейную историю, то перебазирование применяет все коммиты один за одним из одной ветки в другую, оставляя за собой линейную историю коммитов. По сути это автоматическое выполнение нескольких команд cherry-pick подряд.

На схеме выше вы видите как команда берет все коммиты, которые есть в ветке topic, но отсутствуют в ветке master (коммиты 169a6 and 2c33a), и воспроизводит их в ветке master. Затем указатель ветки перемещается на новое место. Следует заметить, что старые коммиты будут уничтожены сборщиком мусора, если на них уже ничего не будет ссылаться.

Используйте ключ --onto чтобы ограничить глубину захвата объединяемой ветки. На следующей схеме вы можете увидеть как в ветку master приходят лишь последние коммиты из текущей ветки, а именно коммиты после (но не включая) 169a6, т. е. 2c33a.

Есть также интерактивный режим перебазирования git rebase --interactive, с помощью которого вы сможете сделать вещи похитрее простого линейного применения коммитов, а именно сбрасывание (dropping), изменение порядка (reordering), правка (modifying) и выдавливание (squashing) коммитов. Нет наглядной схемы, чтобы показать эти возможности; за описанием лучше обратиться к справке по git-rebase(1).

Детали

Содержание файлов не хранится в индексе (.git/index) или в объектах коммитов. Правильнее было бы сказать, что каждый файл хранится в базе данных объектов (.git/objects) в двоичном представлении; найти этот файл можно по его SHA-1 хешу. В файле индекса записаны имена файлов, их хеши и дополнительная информация. В информации о коммитах вы встретите тип данных дерево, для идентификации которого также используется SHA-1 хеш. Деревья описывают директории в рабочей директории, а также содержат информацию о других деревьях и файлах в принадлежащей к обозначенному дереву. Каждый коммит хранит идентификатор своего верхнего дерева, которое содержит все файлы и другие деревья, измененные в этом коммите.

Если вы делаете коммит из состояния «оторванной головы» (detached HEAD), то на этот коммит будет ссылаться ссылка истории HEAD. Но рано или поздно время хранения этой ссылки истечет, и этот коммит будет уничтожен сборщиком мусора точно также, как это делается при выполнении команд git commit --amend и git rebase.

Равнозначные команды

  • git reset --hard e3f1e37 и git checkout e3f1e37
  • git add . && git commit -m "Comment" и git commit -am "Comment"
  • git checkout master~3 и git reset --hard HEAD~3

Наилучшая замена команд

  • git pull origin masterна git pull --rebase origin master
  • git pull origin featureна git pull --rebase origin feature

Легенда

  • сцены — stage / index промежуточное состояние файлов, до создания комита
    • Применяется для временного / промежуточного состояния файлов перед формированием комита.
    • index — область зафиксированных изменений, т.е. всё то, что вы подготовили к сохранению в репозиторий.
  • repository
  • origin — Ссылка на внешний репозиторий

Применяется git checkout origin/master, git checkout -b test origin/test

  • HEAD — указатель на commit, в котором мы находимся.
  • master — имя ветки по-умолчанию, это тоже указатель на определённый коммит
  • origin — имя удалённого репозитория по умолчанию (можно дать другое)
  • fast-forward — Объединение веток, при котором не выполняется merge (а комиты просто складываются 1 за другим) и получила название fast-forward. Принудительное применение команды git merge --ff-only collider/terminate

Git - распределённая система управления версиями. - [Windows]

$
0
0

Git - распределённая система управления версиями.

Инструкции

Инициализация / init

$ git init
$ git config--global user.name "John Doe"
$ git config--global user.email johndoe@example.com

Windows

$ git config--global core.filemode false
$ git config--global core.preloadindex true
$ git config--global core.fscache true
$ git config--global gc.auto 256
$ git config--global status.submoduleSummary false

Конфигурация

Вывод установленных параметров

$ git config--local-l

Установка параметров

$ git config--local core.filemode true

Актуализация изменений

$ git checkout-- . &&git pull&&git submodule update --init--recursive

Локальное хранилище / stage

  • Добавление в индекс
    • git add <имя_файла>
    • git add *
    • git add .
    • git add -A - Добавить в индекс только удаленные файлы
  • Удаление из индекса
    • git rm <имя_файла>
    • git rm *.php
    • git reset - Отменить индексацию последних изменений
    • git rm --cached <ИМЯ_ФАЙЛА> - Удалить из индекса файл и добавить в игнор. Файл останется в каталоге.
    • git reset HEAD benchmarks.rb - Отменить индексацию файла benchmarks.rb

Локальный репозиторий

    • Фиксация изменений
      • git commit -m "Описание коммита"
      • git checkout <hash-коммита> - Переключиться на определенный коммит
      • git commit --amend - Удаление последнего коммита
    • Восстановление файлов из репозитория
      • git checkout <branch> # Перемещение указателя HEAD на комит или ветку
      • git reset --hard HEAD~n # Перемещение указателя HEAD на комит
      • git checkout -- <имя_файла> - восстановление файла из репозитория
      • git reset --hard origin/master - удалить все локальные изменения и коммиты
      • git reset --hard origin/master
      • git reset --hard HEAD^ # Сбросить все локальные измеения до текущего состояния
    • Перемещение комитов
      • git rebase -i HEAD~n # Позволяет переупорядочивать, менять комменты, выборочно удалять и прочее
    • Ветвление branch
      • git branch bug1Создать ветку bug1
      • git branch -d bug1Удалить ветку bug1
    • Пересадка веток / rebase
      • git rebase master
        1. git checkout master # переключаемся на бранч master
        2. git rebase bug1 # пересаживаем историю изменений ветки bug1 в master
      • или
        1. git checkout bug1
        2. git rebase master
        3. git checkout master
        4. git merge bug1 # При этом произойдет fast-forward merge

Отмена коммитов

До комита
  • git reset --hard HEAD
После комита
  • git reset --hard ORIG_HEAD
Документация

Временное хранилище / Stash

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

Вместо git reset --hard, можно сначала файлы сохранять во временное хранилище, затем применять изменения.

  • git stashПоместить файлы во временное хранилище
  • git stash applyПрименить последнее изменение из стека / лога к текущей рабочей копии
  • git stash dropУдалить последнее изменение в стеке / лога
  • git stash listПоказать все изменения в стеке / логе
  • git stash showПоказать последнее измененеие в стеке / логе (патч)
  • git stash popПрименить последнее изменение из стека к текущей рабочей копии и удалить его из стека
  • git stash clearОчистить стек изменений

Удаленный репозиторий / origin

  • Синхронизация
    • git push origin master
    • git remote add origin <адрес_сервера>

Submodule / Субмодули

  • git submodule add git@github.com:Mirocow/express-chat.git
  • git submodule update –init [express-chat]
  • git submodule update --init --recursive - обновить все зависимые модули (репозитории)
  • git rm -r yii2-mongodb - Удалить сабмодуль yii2-mongodb
  • git rm -r yii2-redactor - Удалить сабмодуль yii2-redactor :!:
  • git submodule add -- /to/path/git/dir - Добавить локальный модуль (Необходимо указывать только полный путь до папки) :!:

Как вынести код в отдельный репозитоий

Дано:

  • Основной репозиторий app/
  • Необходимый код лежит тут app/vendor/mirocow/yii2-redactor
  • копируем код в отдельную папку и создаем репозитоий путь-до-репозитория/yii2-redactor
  • удаляем если есть уже ранее созданный модуль git rm -rf yii2-redactor
  • обязательно переходим в добавляемую папку app/vendor/mirocow
  • добавляем модуль как отдельный репозитоий из папки git submodule add -f путь-до-репозитория/yii2-redactor/

Отладка

GIT_CURL_VERBOSE

$ GIT_CURL_VERBOSE=1git clone htps://...

GIT_TRACE

Принимает значаения 1, 2 или true

$ GIT_TRACE=2git clone htps://...

Настройка

  • git config color.ui true - использовать цветной вывод в терминале

http://marklodato.github.io/visual-git-guide/index-ru.html?no-svg

Настройка deploy on github

Настройка github для работы с Deploy keys

Ошибки

Ошибка: There is no tracking information for the current branch

При возникновении ошибки вида

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to rebase against.
See git-pull(1)for details
 
    git pull<remote><branch> 
If you wish to set tracking information for this branch you can do so with:
 
    git branch--set-upstream-to=origin/<branch> master

следует выполнить

$ git pull origin master
$ git branch--set-upstream-to=origin/master master
$ git pull

Видеоуроки

Документация

Сервер

Клиенты

Code Review

Ссылки

O себе

$
0
0

O себе

  • Активно увлекся программированием в 1990 году. Свое знакомство с WEB начал с интерпритатора Perl, затем плавно перешел на PHP. Огромное кол-во времени провожу за чтением специализированной литературы. Не увлекаюсь соц сетями и не состою ни в каких братствах. Всегда готов помочь любому обратившемуся.
  • Имею не маленький опыт в настройке UNIX серверов и написанию программ на PHP. В качестве основных инструментов разработки использую PHPed + DBG (на платформе Win7), также последнее врямя работаю на Mac OS, где постоянно применяю ряд программ: Homebrew, PhpStorm IDE for PHPитд (Полный список ПО доступно тут). Cерверную часть предпочитаю развертывать на Debianсистемах. В своих работах использую Yii Framework / YiiFramework 2и Drupal.
  • Также увлекаюсь спортом и люблю слушать качественную музыку.
  • Имею профили: Drupal.ru, YiiFramework, GitHub, Bitbucket
  • Являюсь разработчиком: http://roof-builder.ru, 1С + Drupal

JQuery plugins / Плагины (Bootstrap) - [Модальные окна]

$
0
0

JQuery plugins / Плагины (Bootstrap)

Cookie

Snippets

Коллекции / Обзоры

Редакторы

Визульное отображение / Виджеты

UI / Bootstrap

Работа с контентом

Themes

Templates

Комбобокс / Селекторы / Listbox

Tags

Переключатели

Календари / DatePicker

Анимация

Icons / Arows

Меню / Navbar

Mobile

Контекстное

Модальные окна

Альтер / Промт

Блокирока контента

  • https://github.com/malsup/blockui/ - или всплывающее окно (пожайлуста подождите) или блокировка выбранного node

Слайдеры

Template

Примеры

Сплитеры

Карусели

Скрол

Подсказки / ToolTip / Notify

Notify

growl

Просмотр в окне / Lightbox

Lazy images

Forms / Элементы форм

Стилизация

Checkbox

Editables / Tables / Sortable

Control input length

Validation

Form Builder

Color Picker

Progress Bar

Autocomplete

Wizard

Buttos

Sliders

Spin / увелить-уменьшить значение type input

File Input

Tree view

Markdown

Pagination / Переключатели страниц

Прелоадер

Графики

Поведение пользователя

Посмотреть

Xcode

$
0
0

Xcode

Xcode not set up properly. You may need to confirm the license agreement by running /usr/bin/xcodebuild.

There is a similar problem with building Qt itself with Xcode 8. I have the Qt 5.7 source code on my machine with Xcode 8 GM, and I when I run 'configure' I get the same message about needing to agree to the Xcode license. Going through the agree procedure (which is described wrongly in the error message, incidentally) makes no difference. (https://forum.qt.io/topic/71119/project-error-xcode-not-set-up-properly/7)

5.6

$ cd/opt/Qt5.6.1/5.6/
$ echo"$(cat clang_64/mkspecs/features/mac/default_pre.prf | sed -e 's~isEmpty($$list($$system("/usr/bin/xcrun -find xcrun 2>/dev/null")))~isEmpty($$list($$system(\"/usr/bin/xcrun -find xcodebuild 2>/dev/null\")))~g')"> clang_64/mkspecs/features/mac/default_pre.prf

5.7

$ cd/opt/Qt5.7.0/5.7/
$ echo"$(cat clang_64/mkspecs/features/mac/default_pre.prf | sed -e 's~isEmpty($$list($$system("/usr/bin/xcrun -find xcrun 2>/dev/null")))~isEmpty($$list($$system(\"/usr/bin/xcrun -find xcodebuild 2>/dev/null\")))~g')"> clang_64/mkspecs/features/mac/default_pre.prf

Ошибки

<Growl/Growl.h> file not found in xcode

To include a framework in your Xcode project, choose Project > Add to Project and select the framework directory. Alternatively, you can control-click your project group and choose Add Files > Existing Frameworks from the contextual menu. When you add an existing framework to your project, Xcode asks you to associate it with one or more targets in your project. Once associated, Xcode automatically links the framework against the resulting executable.

Видеоуроки - создано

Документация - создано

$
0
0

Репозитории - создано


IDE ZeroBrane Studio

$
0
0

IDE ZeroBrane Studio

IDE

Redis

  • Download, install and start an LDB-enabled Redis server (right now, that's the release candidate for v3.2).
  • Download and install ZeroBrane Studio v1.20 or above - the project is entirely free but if you benefit from using it, please consider supporting Paul's project.
  • Get yourself the IDE ZeroBrane Studio interpreter plugin for Redis from the ZeroBranePackage repository, aptly named redis.lua.
  • To install the plugin for all users, drop it in the packages directory of your ZeroBrane Studio installation (e.g. /opt/zbstudio/packages/), or put it in your ~/.zbstudio/packages directory to savor it alone.

Подробнее

Библиотеки / Расширения / Модули

$
0
0

Библиотеки / Расширения / Модули

Rake

Отладка

Библиотеки

Расширения

Redis

Threads/ Потоки

Массив / Array / Table

MySql

Frameworks

WEB frameworks

HTTP clients

ASYNC

Units / BDD

POSIX

Исходники / Examples

Telegram Bot

Game

Движки

LUA - [Что нового]

$
0
0

LUA

Lua — это интерпретируемый язык со слабой динамической типизацией данных, поддерживающий программирование в императивном, функциональном и объектно-ориентированном (с прототипным наследованием) стилях. В нём есть замыкания, сопрограммы, а функции, соответственно, объекты первого класса. У языка имеется очень хорошо описанная «оборотная сторона»: достаточно удобный C-интерфейс, позволяющий свободно передавать данные между C и Lua частями программы, делать вызовы C-функций из Lua и наоборот

Что нового

Установка / Удаление модулей luarocks - создано

$
0
0

Установка / Удаление модулей luarocks

Установка модулей

Пакетный менеджер (luarocks)

Debian

$ apt install luarocks
$ luarocks install luasec

MacOS

Установки из папки

$ git clone https://github.com/Olivine-Labs/busted.git
$ luarocks install busted/busted-1.3-1.rockspec

or

$ git clone https://github.com/Olivine-Labs/busted.git
$ cd busted
$ luarocks make

Удаление

$ luarocks remove  rockspecs/luasocket-async-scm-0.rockspec

Конструкции

RUBY - [Installing RVM on Linux]

$
0
0

RUBY

Update

$ gem update --system

Иногда требуется обновить только локальные пакеты

$ gem update --local

или воспользоваться bundler

$ bundle update

Uninstall

  • apt-get remove rubygems
  • apt-get remove ruby
  • cd /usr/local/lib/site_ruby/1.8
  • rm -r gauntlet_rubygems.rb rubygems.rb ubygems.rb rubygems
  • rm -r /usr/lib/ruby/gems/
  • rm /usr/bin/gem{,1.8}

Installing Ruby 1.9.2 and gems

  • apt-get install ruby1.9.1-full
  • update-alternatives --config ruby
  • update-alternatives --config gem
  • apt-get install ruby1.9.1-dev
  • apt-get install libxml2-dev
  • apt-get install libxslt1-dev
  • apt-get install libsqlite3-dev
  • REALLY_GEM_UPDATE_SYSTEM=1 gem update --system

Installing RVM on Linux

  • apt-get install build-essential
  • apt-get install curl
  • apt-get install zlib1g-dev libreadline-dev libssl-dev libxml2-dev
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
$ \curl -sSL https://get.rvm.io |bash

~/.bashrc

[[-s"$HOME/.rvm/scripts/rvm"]]&& . "$HOME/.rvm/scripts/rvm"# This loads RVM
  • source ~/.bashrc
  • rvm requirements
  • rvm install 1.9.3

How do I upgrade my ruby 1.9.2-p0 to the latest patch level using rvm

  • rvm upgrade 1.9.2 1.9.2-p0
  • rvm update; rvm reload
  • rvm install ruby-1.9.2-p136
  • rvm --default ruby-1.9.2-p136 -
  • rvm get head -
  • rvm reload -

RubyGems + RVM + Ruby 2.1.5 + Bundler

Запускаем не из под root
  • sudo apt-get update
  • curl -L https://get.rvm.io | bash -s stable --rails
  • source ~/.rvm/scripts/rvm
  • rvm info # Смотрим что все ок
  • rvm install ruby-2.1.5 # Если необходимо поменять версию Ruby
  • gem install bundler
  • bundle install # В проекте при наличии Gemfile файла

GEM

  • gem list -d

RubyGems

  • apt-get install rubygems
  • gem install rubygems-update
  • update_rubygems --version=1.6.2
  • gem update --system 1.6.2
  • gem update --system

Проверка зависимостей

  • gem environment
  • gem install bundler
  • bundle install --without development test
  • ruby script/server -e production|development -d -p 3000 # -d - демон
  • ruby script/server thin|webrick -e production
  • ruby script/rails thin

Удаление пакетов

Rubygems >= 2.1.0

$ gem uninstall -aIx

Rubgems < 2.1.0

for i in`gem list --no-versions`; do gem uninstall -aIx$i; done

Bundle environment

Установка

bundle install

Окружение

cat ./.bundle
  ---
  BUNDLE_DISABLE_SHARED_GEMS: "1"
  BUNDLE_WITHOUT: development:test
  BUNDLE_PATH: .bundle

Запуск локально

bundle exec <<command>> <<params>>

Запуск консоли

bundle exec rails c  

Ошибки

После запуска установки rvm из под пользователя командой <text>\curl -L https://get.rvm.io | bash</text>. Процесс установки завершается с ошибкой.

mkdir: cannot create directory `/usr/local/rvm': Permission denied

Необходимо удалить базовые настройки, если они есть:

  • rm /etc/profile.d/rvm.sh - Тут прописано определение путей
  • rm /etc/rvmrc

Servers

Gems

Ссылки

Viewing all 1318 articles
Browse latest View live