Разделы
Теги | RSS © 2008 – 2022
Контакты
email:
skype:
» » » Страница 10

Полезные gulp-плагины: git, cat, changed, ssh, jscs и другие


Обновил списочек новыми на мой взгляд полезными плагинами.

gulp-git — для работы с git
// Run git commit 
// src are the files to commit (or ./*) 
gulp.task('commit', function(){
  return gulp.src('./git-test/*')
    .pipe(git.commit('initial commit'));
});

gulp-changed — обработка только измененых файлов
gulp.task('default', function () {
    return gulp.src(SRC)
        .pipe(changed(DEST))
        // ngAnnotate will only get the files that 
        // changed since the last time it was run 
        .pipe(ngAnnotate())
        .pipe(gulp.dest(DEST));
});

gulp-cat — выводит файл в консоль
gulp.task('default', function() {
    return gulp.src('./README.md')
        .pipe(cat());
});

gulp-svgmin — минимизация svg файлов
gulp.task('default', function () {
    return gulp.src('logo.svg')
        .pipe(svgmin())
        .pipe(gulp.dest('./out'));
});

gulp-image-embed — конвертирует img в стилях в data-URI
gulp.task('embed', function(){
  return gulp.src('*.css')
    .pipe(embed({
      asset: 'static'
    }))
    .pipe(gulp.dest('build.css'));
});

gulp-ssh — для работы с SSH и SFTP
var config = {
  host: '192.168.0.21',
  port: 22,
  username: 'iojs',
  privateKey: fs.readFileSync('/Users/zensh/.ssh/id_rsa')
}
  
var gulpSSH = new GulpSSH({
  ignoreErrors: false,
  sshConfig: config
})
 
gulp.task('exec', function () {
  return gulpSSH
    .exec(['uptime', 'ls -a', 'pwd'], {filePath: 'commands.log'})
    .pipe(gulp.dest('logs'))
})

gulp-css-base64 — конвертация данных в стилях в base64 data URI
gulp.task('default', function () {
    return gulp.src('src/css/input.css')
        .pipe(cssBase64({
            baseDir: "../../images",
            maxWeightResource: 100,
            extensionsAllowed: ['.gif', '.jpg']
        }))
        .pipe(gulp.dest('dist'));
});

gulp-jscs — проверяет ваш js на правильность javascript Code Style http://jscs.info/
gulp.task('default', function () {
    return gulp.src('src/app.js')
        .pipe(jscs());
});

Gulp плагины gzip, mtime, rsync, rimraf


Пополнил список полезных gulp плагинов

gulp-gzip — создание gzip архивов (zip и gz)
var gulp = require('gulp');
var gzip = require('gulp-gzip');

gulp.task('compress', function() {
    gulp.src('./dev/scripts/*.js')
    .pipe(gzip())
    .pipe(gulp.dest('./public/scripts'));
});

gulp-rev-mtime — создание временной метки для js css
var gulp = require('gulp');
var rev = require('gulp-rev-mtime');
 
gulp.task('rev', function () {
    gulp.src('template.html')
        .pipe(rev())
        .pipe(gulp.dest('.'));
});
На входе в template.html

 

На выходе получим

 


gulp-rsync — rsync, для деплоя файлов на сервер
var gulp = require('gulp');
var rsync = require('gulp-rsync');
 
gulp.task('deploy', function() {
  gulp.src('build/**')
    .pipe(rsync({
      root: 'build',
      hostname: 'example.com',
      destination: '/path/to/site'
    }));
});

gulp-rimraf — удаление файлов и директорий
var rimraf = require('gulp-rimraf');

gulp.task('task', function() {
  return gulp.src('../temp/*.js', { read: false })
    .pipe(rimraf({ force: true }));
});

Установка программ на CentOS 6.6 ( nginx 1.8.0 + php-fpm 5.6 + mysql 5.6 + mongo 3.0 + sendmail )


Ранее писал как стартануть virtaulbox для разработки на локалке c ubuntu и таким же набором программ. А теперь, предположим мы арендовали VPS. Нам вручили ssh: ip, логин и пароль от голой машины CentOS.



Приступим!

Тип ОС:
cat /proc/version

Версию ОС:
cat /etc/issue

Обновляемся
yum update -y

Ставим wget и nano если их нет
yum install wget nano -y

Установка nginx 1.8.0
wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
rpm -i nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx -y
chkconfig nginx on && service nginx start

Установка php-fpm 5.6 и его компонтентов
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
cd /etc/yum.repos.d
curl -O http://rpms.famillecollet.com/enterprise/remi.repo
yum install php php-fpm php-opcache php-gd php-mysql php-mongo -y --enablerepo=remi-php56
chkconfig php-fpm on && service php-fpm start

Установка mysql 5.6
cd ~
wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
rpm -i mysql-community-release-el6-5.noarch.rpm
yum install mysql-community-server -y
chkconfig mysqld on && service mysqld start 
/usr/bin/mysql_secure_installation

Установка mongo 3.0
nano -w /etc/yum.repos.d/mongodb-org-3.0.repo
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1

yum install mongodb-org -y
chkconfig mongod on && service mongod start

Установка sendmail
yum install sendmail -y
chkconfig sendmail on && service sendmail start

Проверяем что все запущено
netstat -tulpn
service sendmail status

На этом установка закончена.
Дальше надо настроить каждый компонент.

nginx
/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf

php
/etc/php5/fpm/php.ini
/etc/php5/fpm/pool.d/www.conf

mysql
/etc/mysql/my.cnf

mongodb
/usr/local/etc/mongodb.conf
/etc/mongod.conf

sendmail
/etc/mail/
/etc/mail/sendmail.mc
Что бы письма отправленные с вашего сервера не попадали в спам нужно настроить SPF, DKIM и DMARC

Транзакции MySQL


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

Создадим таблицу balance
CREATE TABLE `balance` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `action` varchar(255) NOT NULL,
  `val` int(11) NOT NULL,
  `total` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Проверяем вставку без транзакции

Тест транзакций MySQL 5.6

'+', 'val' => 10 ); $action[] = array( 'act' => '+', 'val' => 20 ); $action[] = array( 'act' => '-', 'val' => 5 ); $action[] = array( 'act' => '+', 'val' => 10 ); $i = 0; // БЕЗ ТРАНЗАКЦИЙ foreach ( $action as $key => $value ) { $i ++; // имитируем долгое выполнение на 2-ой вставке ( при этом сервер выключаю ) if ( $i == 2 ) sleep(20); // получить последний total $row = mysqli_fetch_assoc($db->query("SELECT total FROM balance ORDER BY id DESC LIMIT 1")); $total = $row['total']; $db->query(" INSERT INTO balance SET action = '{$value['act']}', val = {$value['val']}, total = $total {$value['act']} {$value['val']} "); print_r($value); } echo '
- запросы выполнены'; $db->close();

// Резльтат: выключив на паузе mysql, вставилось в таблицу balance одна запись - целостность нарушена ( в реальной жизни это могло бы например значить, что у кого-то деньги с баланса сняли, а кому-то зачислить не успели из за сбоя)

Проверяем вставку с транзакцией

Тест транзакций MySQL 5.6

'+', 'val' => 10 ); $action[] = array( 'act' => '+', 'val' => 20 ); $action[] = array( 'act' => '-', 'val' => 5 ); $action[] = array( 'act' => '+', 'val' => 10 ); $i = 0; // С ТРАНЗАКЦИЕЙ $db->autocommit(FALSE); foreach ( $action as $key => $value ) { $i ++; // имитируем долгое выполнение на 2-ой вставке (выключаем mysql принудительно) if ( $i == 2 ) sleep(20); // получить последний total $row = mysqli_fetch_assoc($db->query("SELECT total FROM balance ORDER BY id DESC LIMIT 1")); $total = $row['total']; $db->query(" INSERT INTO balance SET action = '{$value['act']}', val = {$value['val']}, total = $total {$value['act']} {$value['val']} "); print_r($value); } if ( ! $db->commit() ) { $db->rollback(); echo '
- возникла ошибка откат запросов'; die(); } echo '
- запросы выполнены'; $db->close();

// Результат: выключив mysql коммит не срабатывает и ни один запрос из транзакции не добавляется в бд. Целостность не нарушена ( в реальной жизни это могло бы например значить, что у кого-то деньги с баланса сняли, произошел сбой, но так как commit не выполнился, то rollback откатывает до начального состояния).
COMMIT - для записи изменений на диск.
ROLLBACK - игнорирует изменения, произведенные с начала транзакции.

GZIP сжатия в NGINX


/etc/nginx/nginx.conf
      gzip                          on;
        gzip_buffers                  4 64k;
        gzip_comp_level               6;
        gzip_disable                  "msie6";
        #gzip_min_length              32768;
        gzip_proxied                  any;
        #gzip_static                  off;
        #gzip_http_version            1.1;
        gzip_vary                     on;
        gzip_types                    text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/json;

Черновик по основным запросам Mongodb через PHP


Инициализация
try {
        $mongo = new MongoClient("mongodb://localhost:27017/yourtable");
        $db= $mongo->selectDB("yourtable");
        $collection = $db->yourcollection;
} catch (MongoConnectionException $e) {
        die('Error connecting to MongoDB server. ' . $e->getMessage());
} catch (MongoException $e) {
        die('Error: ' . $e->getMessage());
}

http://www.querymongo.com/ - онлайн сервис преобразует sql select в mongo select (если запрос чуть сложнее обычного сразу использует reduce, я же предпочитаю использовать aggregate)

insert($data_insert);
// lastID:  (string)$data_insert['_id'];


// SELECT
$query = array(
        // where
);
$projection = array(
        // return
);
$cursor = $collection->find($query, $projection)
                                        ->skip($start)
                                        ->limit($limit)
                                        ->sort(array('field'=> -1));
foreach ($cursor as $row) {
        echo "
";
        print_r($row);
        echo "
"; } // count $count = $collection->count(); // SELECT_ONE $query = array( // where ); $projection = array( // return ); $row = $collection->findOne($query, $projection); echo "
";
print_r($row);
echo "
"; // UPDATE $criteria = array( // where ); $update = array( // set ); $options = array( // upsert: true, multi: true ); $collection->update($criteria, $update, $options); // DELETE $query = array( // where ); $options = array ( 'justOne' => true ); $cursor = $collection->remove($query, $options); // COMPLEX SELECT $data = $collection->aggregate( array( '$match' => array( // where ) ), array( '$project' => array( // manipulate fields ) ), array( '$group' => array( // group ) ), array( '$skip' => array( // skip ) ), array( '$limit' => array( // limit ) ), array( '$sort' => array( // sort ) ) ); // print_r($data);
«
1...67891011121314...63
»
Вверх