суббота, 28 октября 2017 г.

Настройка nginx + php-fpm на Mac OS

Привет!

В этой статье хочу рассказать, как настроить nginx.

Для достижения этой цели требуется внести ниже описанные изменения в конфиг nginx.

Откроем его для редактирования.

1) укажем имя пользователя (staff - имя группы)

#user test staff;

2) укажем количество процессов (совпадает с количеством ядер на компе)

worker_processes 2;

3) в подблоке server блока http укажем порт

listen 80;

4)  укажем максимальный размер файлов

client_max_body_size 128M;

5)  укажем имя сервера

server_name testwork;

6) укажем кодировку

charset utf-8;

7) в блоке location определяется, где на компе лежит сайт (root), с какими файлами будет работать файл (index) и автоматический запуск index.php (try_files)

location / {
    root /usr/local/var/www/testwork;
    index index.php;
    try_files $uri /index.php$is_args$args;
}

8) осталось настроить php-fpm, чтобы web-сервер мог обрабатывать php скрипты

location ~ \.php {
    root                   /usr/local/var/www/testwork;
    fastcgi_pass     127.0.0.1:9000;
    include             fastcgi_params;
    fastcgi_index   index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    try_files $fastcgi_script_name = 404;
}

try_files фактически закроет доступ ко всем несуществующим файлам php

$document_root - путь, где лежит сайт. В моём случае это /usr/local/var/www/testwork


воскресенье, 22 октября 2017 г.

Git + GitHub за 5 минут

Привет!

В этой статье хочу рассказать, как начать использовать самую популярную систему контроля версий Git и загружать свои изменения в коде на GitHub. Эта статья для новичков.

Первым делом необходимо скачать и установить себе на компьютер Git. В этом поможет сайт https://git-scm.com/downloads.

Теперь перейдём на сайт GitHub https://github.com/

После регистрации нажмём на кнопку Start a project.

 
Далее укажем название репозитория. Репозиторий у нас будет публичный.


После этих действий кнопка Create repository  станет доступной, нажмём на неё.

Далее увидим следующие инструкции, которые нужно выполнить в командной строке:

…or create a new repository on the command line

echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/expx1/test.git
git push -u origin master

…or push an existing repository from the command line

git remote add origin https://github.com/expx1/test.git
git push -u origin master


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

Рассмотрим первый случай.
Создадим на рабочем столе папку test. Перейдём в неё и выполним 

git init 

После успешного выполнения увидим сообщение, что у нас в папке создан пустой репозиторий Git в папке .git, которую теперь можно увидеть в корне нашей папки test.

Создадим в папке test файл index.php
В нём напишем 

<?php
    echo 'Hello Git';

Теперь необходимо подготовить изменения для коммита, то есть проиндексировать

git add index.php

Если бы мы изменили несколько файлов, то можно было бы проиндексировать их одной командой git add .

Если выполним git status, то увидим, что изменения готовы для коммита. Сделаем коммит.

git commit -m 'Первый коммит'

Коммит создан.  Его можно увидеть, выполнив git log

До сих пор все наши изменения находятся в нашем локальном репозитории. Мы хотим отправить их на GitHub. Для это необходимо "запушить" комитты. Но прежде надо указать Git, куда будем "пушить". Выполним команду:

git remote add origin https://github.com/expx1/test.git

Теперь можем отправить наши изменения на GitHub в ветку master

git push -u origin master

Если Git ранее не был установлен, то после этой команды он попросит указать имя юзера и пароль. Имя юзера и пароль должны совпадать с логином и паролем от GitHub. В противном случае будет 403 ошибка - нет доступа.

воскресенье, 20 июля 2014 г.

Отслеживаем успешность CRUD операции на ExtJS 5

Доброго времени суток!

Работаю с ExtJS 5. У меня возникла следующая проблема:

через API на сервер отправляется запрос. Сервер проверяет входящие параметры и либо возвращает JSON с параметром success = true,  либо success = false. Мне необходимо было проверить значение параметра success - в случае успеха (true) программа работает в штатном режиме, если наоборот (false), неудачная запись удаляется из store, и программа продолжает свою работу без каких-либо ошибок.

Казалось бы, сервер вернул false и какое-то сообщение, значит возникла какая-то авария. Но на самом деле это не так. ExtJS воспринимает подобные ответы, как штатные, поэтому по умолчанию не "ловит" такие ошибки.

А решается эта проблема просто.  Стор имеет пустые функции onCreateRecords, onUpdateRecords, onDestroyRecords, которые можно переопределить. Они вызываются после добавления, обновления и удаления записи соответственно. Причем описываются  ни в listeners, ни в proxy, а в самом store.

Описание store имеет следующий вид:
Ext.define('некоторое название стора',{
 extend : 'Ext.data.Store',
 model : 'некоторая модель стора',
 autoSync: true,
 proxy : {
  type : 'ajax',
  api: {
    create: '...',  // сервис создания записи
    update: '...',  // сервис обновления данных
    delete: '...'   // сервис удаления данных
  },
  url : 'некоторый url', // сервис чтения данных
  reader : {
   type : 'json',
   rootProperty : 'data',
   totalProperty: 'totalCount',
   successProperty: 'success'
  }
 },
 remoteFilter: true,
 remoteSort: true, 
 onUpdateRecords: function(records, operation, success) {
   if(!success) {
     this.rejectChanges(); // удаление из стора неудачной записи
   };
 },
 onCreateRecords: function(records, operation, success) {
  if(!success) {
    this.rejectChanges();
  };
 },
 onDestroyRecords: function(records, operation, success) {
   if(!success) {
     this.rejectChanges();
    };
 }
});

Спасибо за внимание. Всем успехов! :)

вторник, 24 декабря 2013 г.

MS SQL Server 2012. Автоматизация экспорта данных в Excel

Доброго времени суток!

Хочу рассказать как автоматизировать экспорт данных в Excel из MS SQL Server 2012.
Сначала необходимо создать шаблон, т.е. обычный документ Excel формата xls. Для автоматизации экспорта данных следует создать пакет служб SSIS. Это можно сделать, используя SQL Server Business Intelligence или SQL Server Managment Studio. Я сделал экспорт, используя SQL Server Managment Studio.
 
Запустим SQL Server Managment Studio.
 
1) В обозревателе объектов выберем базу данных, которая содержит интересующую нас таблицу:


2) Нажмём правую кнопку мышки. В "Задачах" выберем "Экспортировать данные...":


3) Появится окно мастера импорта:


Жмём "Далее".

4) В следующем окне указываем "Источник данных", "Имя сервера" и интересующую нас базу данных:


Жмём "Далее".
 

5) Появится окно, которое будет содержать информацию о том, куда следует экспортировать данные. Т.к. экспорт будем делать в Excel, то в поле "Назначение" укажем "Microsoft Excel". Пропишем путь к файлу. У меня Excel 2013, поэтому версию Excel выбрал Microsoft Excel 97-2003, самую позднюю из доступных:
 

Жмём "Далее".

6) В следующем окне можем выбрать экспорт всех столбцов из таблицы или написать SQL-запрос и выбрать определённые столбцы.


В моём случае необходимо было указать определённые столбцы, поэтому я выбрал "Написать запрос, указывающий данные для передачи". Жмём "Далее".
 
7) В появившемся окне я написал простой запрос:

select CreatedOn as 'Дата создания',
          City as 'Город'
     from dbo.tbl_Test

В котором делаю выборку строк из столбцов "Дата создания" и "Город" таблицы dbo.tbl_Test.

 

Нажав на кнопку "Выполнить анализ" можно проверить запрос на ошибки. Жмём "Далее" 
 
8) В следующем окне в правом столбце вместо "Запрос" напишем "Тест". С таким названием лист будет отображаться в Excel.

 

Далее дважды кликнем по левому столбцу ([Запрос]). В появившемся окне видим, что для строки "Город" тип не определён:


Для этой строки указываем тип VarChar, размер 255. Для корректного отображения даты создания в отчёте необходимо для поля "Дата создания" указать тип DateTime. Если поставить маркер "Удалить и создать повторно целевую таблицу", это позволит многократно экспортировать данные в шаблон Excel , причём при каждом новом экспорте файл будет перезаписываться.


Жмём "Ок".

9) В следующем окне ничего не меняем, жмём "Далее".






10) Теперь можем сделать просто экспорт данных в шаблон Excel или сохранить пакет служб SSIS и, при необходимости, запускать его. Поставим маркер на "Сохранить пакет служб SSIS". Пакет можно сохранить на сервере или в файловой системе. Я сохранил в файловой системе. Жмём "Далее".



11) Выбрав папку, сохраним пакет как "Test.dtsx"


Жмём "Далее".
 
12) Появится окно:


Жмём "Готово".
 
13) Следующее окно говорит нам, что мы не допустили никаких ошибок.


Жмём "Закрыть". Если созданный пакет открыть в текстовом редакторе, то увидим, что в строке:

 DTS:ConnectionString="Provider= Microsoft.Jet.OLEDB.4.0;Data Source=C:\upload\aaa.xlsx;Extended Properties=&quot;Excel 8.0;HDR=YES&quot;;" />

в качестве поставщика указан Microsoft.Jet.OLEDB.4.0. Если у вас 64 разрядный сервер, то в качестве поставщика необходимо использовать Microsoft.ACE.OLEDB.15.0 или Microsoft.ACE.OLEDB.12.0. Если Excel позднее Excel 2007, то вместо Excel 8.0 следует указать Excel 12.0 (в этой же строке)

DTS:ConnectionString="Provider=Microsoft.ACE.OLEDB.15.0;Data Source=C:\upload\aaa.xlsx;Extended Properties=&quot;Excel 12.0;HDR=YES&quot;;" /> 

Запустив пакет:
 
EXEC xp_cmdshell 'dtexec /f "C:\upload\Test.dtsx"'
Go
 
и открыв файл excelTest.xls, получим:


Следует отметить, что дата отображается, как дата; числа (если они есть в отчёте), как числа; строки, как строки. Никакого дополнительного форматирования делать не надо. Стиль заголовков столбцов можно изменить. Повторный экспорт будет производиться с учетом сохранённого стиля.


Для автоматизации экспорта данных из таблицы в Excel необходимо создать job при помощи агента SQL сервера. Job будет запускать созданный пакет служб SSIS.