Миграции в yii2

Консольные команы (подробнее):

  1. yii migrate/create <name> - создаст миграцию
  2. yii migrate/create **create_**news**_table** - создаст миграцию с кодом для создания таблицы news
  3. yii migrate - выведет список всех миграций, которые не применялись до сих пор и спросит выполнить ли их.
  4. yii migrate 3 - явно указывает сколько миграций необходимо применить к БД.
  5. yii migrate/to 150101_185401 - с помощью временной метки указывает какую миграцию применить.
  6. yii migrate/down - отменяет самую последнюю применённую миграцию
  7. yii migrate/down 3 - отменяет 3 последних применённых миграции
  8. yii migrate/redo - перезагрузить последнюю применённую миграцию
  9. yii migrate/redo 3 - перезагрузить 3 последние применённые миграции
  10. yii migrate/history - показать последних 10 применённых миграций
  11. yii migrate/history 5 - показать последних 5 применённых миграций
  12. yii migrate/history all - показать все применённые миграции
  13. yii migrate/new - показать первых 10 новых миграций
  14. yii migrate/new 5 - показать первых 5 новых миграций
  15. yii migrate/new all - показать все новые миграции
  16. yii migrate/mark m150101_185401_create_news_table - Вместо применения или отката миграций, есть возможность просто отметить, что база данных была обновлена до определенной миграции. Указывается временная метка или полное имя миграции.

Читать дальше...

Установка yii2 advanced на Raspberry и локальную машину, связка с Bitbucket

Задача:
Установить на рабочий компьютер расширенную версию yii2, создать репозиторий на Bitbucket и выложить проект туда. В качестве боевого сервера настроить Raspberry и склонировать с Bitbucket проект. Дальнейшие обновления будут через Bitbucket, посредством git pull из ветки мастер.

  1. Устанавливаем Composer, если нужно, на локальную машину.
  2. Устанавливаем yii2, расширенную версию. В папке с проектами запустить команду, где name-project – имя проекта:
    composer create-project --prefer-dist yiisoft/yii2-app-advanced name-project
  3. php init - инициализируем проект, для разработки выбираем [0] Development.
  4. Инициализируем Git (в папке с проектом), индексируем и делаем первый коммит.

    1
    2
    3
    git init
    git add .
    git commit -m "fist commit"
  5. Перезапустите IDE (Актуально для phpShtorm)

    Если используете MAMP в MAC OS, то настройки для БД в common/config/main-local.php
    должны быть следующие: 'dsn' => 'mysql:host=localhost:8889;dbname=nameDB, (MAMP вешает MySQL на 8889 порт)

  6. Настройка Bitbucket.

    1. Создаем новый приватный репозиторий
    2. Заходим в раздел Обзор и следуем инструкции “Я начинаю полностью с нуля”
      Пример:

      1
      2
      3
      4
      cd /path/to/my/repo
      git remote add origin https://Falbin@bitbucket.org/Falbin/authorization.git
      git push -u origin --all # pushes up the repo and its refs for the first time
      git push origin --tags # pushes up any tags

      В локальном файле конфига (.git/config) добавилась строчка, для связи проекта с Bitbucket (более того вы уже сделали пушь проекта на Bitbucket):

      1
      2
      3
      4
      remote "origin"]
      url = https://Falbin@bitbucket.org/Falbin/authorization.git
      fetch = +refs/heads/*:refs/remotes/origin/*
      ]
  7. ssh root@192.168.0.100 - подключаемся по ssh к Raspberry

  8. Устанавливаем Git на Raspberry, если нужно.
  9. Настраиваем ssh ключ
  10. git clone git@bitbucket.org:Falbin/authorization.git - клонируем репозиторий с Bitbucket
  11. Устанавливаем composer на Raspberry, если нужно. Устанавливаем глобально:

    1. cd ~
    2. curl -sS https://getcomposer.org/installer | php
    3. sudo mv composer.phar /usr/bin/composer
  12. Перед установкой всех нужных пакетов, убедитесь что у вас настроин токен для GitHub. Без токена, GitHub ставит ограничения на колличестов запросов.

    1. Нужно авторизоваться на github.com и перейти по ссылке., затем сгенерировать ключ.
    2. Можно заранне настроить: composer config -g github-oauth.github.com <токен>, либо ввести, когда у вас запросит токе, в поле Token (hidden)
  13. composer install - Устанавливаем все пакеты, нужные нашему yii2

    После чего возникают гребанные проблемы, описанные тут.
    Мне помогло composer global require "fxp/composer-asset-plugin:~1.1.1"

Алгоритм по разработке проекта:

  1. На локальной машине создаем ветку под разные задачи, после выполнения задачи мержим с мастером.
  2. На сервере (Raspberry) делаем git pull из ветки мастер. Никаких правок на серваке вручную (иначе будут конфликты).
  3. Отличная статья, как отменять коммиты.

Полезные ссылки:

  1. Composer
  2. Документация по yii2
  3. Настраиваем ssh ключ
  4. Composer. Установка под Linux.

Настройка статичного ip для Raspberry

Команды, которые нам понадобятся:

  • ping raspberrypi.local - пингуем резбери, находящийся в локальной сети. Отличный способ узнать ip у Raspberry.
  • ssh root@192.168.0.100 - подключение по ssh
  • ifconfig - утилита конфигурирования сетевых интерфейсов.
  • sudo route -n - обработка таблиц сетевых маршрутов
  • sudo reboot - перезагрузка

Читать дальше...

GIT: Обо всём по не многу

Терминология

index — область зафиксированных изменений, т.е. всё то, что вы подготовили к сохранению в репозиторий.
commit — изменения, отправленные в репозиторий.
HEAD — указатель на commit, в котором мы находимся.
master — имя ветки по-умолчанию, это тоже указатель на определённый коммит
origin — имя удалённого репозитория по умолчанию (можно дать другое)

Конфигурирование Git

В Git настройки берутся из трех мест, это (local перекрывает global, а global перекрывает system):

  • Общий для всех пользователей системы, параметр: –system
  • Настройки для пользователя системы, параметр: –global
  • Настройки для конкретного репозитория, параметр: –local

Настраиваем имя пользователя и email (эти данные используются при комитах):

1
2
git config --global user.name "Test"
git config --global user.email test@test.com

Просмотр настроек Git: git config --global --list

Для редактирования global конфига, можно воспользоваться командой nano ~/.gitconfig
Таким образом можно например настроить сокрашения, достаточно добавить:

1
2
3
4
5
6
7
8
[alias]
co = checkout
ci = commit
st = status
br = branch
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
type = cat-file -t
dump = cat-file -p

Основные команды GIT

git init


git add

git add hello.html

В качестве файла для добавления, мы использовали текущий каталог («.»). Это самый краткий и удобный путь для добавления всех изменений в файлы текущего каталога и его подкаталоги.


commit и reset

git commit -m "First Commit" - сделает коммит с комментарием ‘First Commit’, если просто ввести git commit, то git перенесет вас в редактор по вашему выбору (настраивается в конфигах). По умолчанию это Vim (Linux и Mac). В первой строке вводим сообщение, затем, чтобы выйти нужно нажать клавишу ESC, ввести :wq и нажать Enter.

git commit --amend - изменение последнего коммита. Команда возьмёт текущий индекс и перезапишет последний коммит с нужным комменатрием, если добавить -m 'comment'

git revert HEAD или git revert 8e46951 --no-edit - (–no-edit генерирует выходные данные без открытия редактора) создает коммит, в котором отменены изменения комита с хэшом 8e46951. Комментарий нового комита повторяет отмененный коммит, но вначале добовляется слово Revert.


git status


git reset

git reset HEAD hello.html - снимает индексацию изменений, если вы решили, что не хотите коммитить изменения (очищает буферную зону от изменений, которые мы только что проиндексировали).
git reset --hard v1 - удаляет коммиты, сделанные после коммита с тэгом v1 (либо можно указать хэш). Если быть точны то коммиты не удаляются, а отсутствуют в ветке. Коммиты, на которые нет ссылок (обратиться можно только по хэшу), остаются в репозитории до тех пор, пока не будет запущен сборщик мусора.


git log - показывет историю всех коммитов. Очень гибкая команда, подробнее можно узнать, введя команду man git log

  • --pretty="..." — определяет формат вывода.
  • %h — укороченный хэш коммита
  • %d — дополнения коммита («головы» веток или теги)
  • %ad — дата коммита
  • %s — комментарий
  • %an — имя автора
  • --graph — отображает дерево коммитов в виде ASCII-графика
  • --author - Показать только те коммиты, автор которых соответствует указанной строке.
  • -(n) - Показать последние n коммитов
  • --date=short — сохраняет формат даты коротким и симпатичным
  • --all - гарантированно означает, что мы видим все ветки и коммиты. По умолчанию показывается только текущая ветка.

Примеры:

  1. git log --all --pretty=format:"%h %ad $s (%an)" --since='7 days ago' --author=Falbin - показать изменения, сделанные за неделю, разработчиком Falbin
  2. git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short - оптимальная команда

В .gitconfig мы настроили alias для команды git log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short, теперь ее можно вызывать командой git hist


tag

git tag v1 - создание тэга v1 для текущей версии проекта. В дальнейшем можно будет переключаться по названию тэга.
git tag - вызов без параметров приводит к показу имен всех тэгов в проекте.
git tag -d oops - удалит тег, вызвав сборшик мусора. Также будут удалены коммиты, на которые ничего не ссылается.


checkout - взять из репозитория какое-либо его состояние.

  1. Можно переключаться по хешу коммита git checkout 6944a07
  2. Можно переключаться по названию веток git checkout master
  3. Можно переключаться по названию тэга. git checkout v1
    • Можно переключится к предыдущей (на 1 шаг назад) версии проекта от тэга v1 так: git checkout v1^ или git checkout v1~1
    • Можно переключится к предыдущей (на 2 шага назад) версии проекта от тэга v1 так: git checkout v1^^ или git checkout v1~2 и т.д.
  4. Избавляемся от нежелательных правок до коммита.
    • Если файл еще не проиндексирован, можно получить последнее состояние файла по его имени checkout hello.html, чтобы отменить нежелательные изменения.
    • Если нежелательные изменения были проиндексированы необходимо сначала сбросить прииндексированные изменения git reset HEAD hello.html, затем получаем последнее состояние файла с помощью команды git checkout hello.html
  5. git checkout <имяветки> - переключение между ветками.
  6. git checkout -b <имяветки> - создает новую ветку и переключается на эту ветку. Является шорткатом для git branch <имяветки> за которым идет git checkout <имяветки>.

branch

git branch - выводит список локальных веток по умолчанию.
git branch -a - выводит список всех веток, в том числе и в удаленном репозитории.


Работа непосредственно с объектами git

Позволяет не откатывая изменения просмотреть состояние (содержимое) любого файла в любом коммите. Позволяет просмотреть состояние проекта на любой момент времени.

git cat-file -t <hash> - (алиас заданный нами: type)
git cat-file -p <hash> - (алиас заданный нами: dump)

Есть три типа объектов, которые показывает git type: tree, commit, blob.


git merge master

git rebase master

Конечный результат перебазирования очень похож на результат слияния. Ветка style в настоящее время содержит все свои изменения, а также все изменения ветки master. Однако, дерево коммитов значительно отличается. Дерево коммитов ветки style было переписано таким образом, что ветка master является частью истории коммитов. Это делает цепь коммитов линейной и гораздо более читабельной.

Когда использовать перебазирование, а когда слияние?
Не используйте перебазирование …

Если ветка является публичной и расшаренной. Переписывание общих веток будет мешать работе других членов команды.
Когда важна точная история коммитов ветки (так как команда rebase переписывает историю коммитов).
Учитывая приведенные выше рекомендации, я предпочитаю использовать rebase для кратковременных, локальных веток, а слияние для веток в публичном репозитории.



.gitignore

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Игнорирование файла во ВСЕХ директориях
# Например /params/db/config.php или /config.php
config.php
# Игнор-лист файлов проекта
# Игнорировать ВСЕ файлы и директории, включая поддиректории и файлы в них
*
# Игнорирование по типу файла, будут игнорироваться в АБСОЛЮТНО всех директориях
*.zip
*.log
*.pdf
# Игнорирование конкретного файла ТОЛЬКО в корне проекта
# (корнём считается расположение файла .gitignore)
/config.php
# Игнорирование всех файлов и папок ТОЛЬКО в конкретной директории (включая поддиректории)
/images/*
# Игнорирование всех файлов и папок в ЛЮБЫХ директориях с указанным именем
# Например /images/user.jpg, /core/images/user.jpg
images/*
# Игнорирование ВСЕХ html-файлов в ОДНОЙ КОНКРЕТНОЙ директории(НЕ ВКЛЮЧАЯ поддиректории)
# Например /private/index.html
# НЕ БУДУТ проигнорированы файлы в /private/ivan/index.html
/private/*.html
# Игнорирование ВСЕХ html-файлов в КОНКРЕТНОЙ директории ВКЛЮЧАЯ поддиректории
# Например /private/info.html, /private/users/ivan/info.html
/private/**/*.html
# Исключение из игнорирования
# Игнорирование ВСЕХ файлов и папок внутри директории /secret,
# за исключением файла /secret/free.txt, он не будет проигнорирован
/secret/*
!/secret/free.txt
# Игнорирование файла с именем, содержащим спецсимволы
# Например !readme!.txt
\!readme!.txt
# Игнорирование всех JPG и JPEG файлов внутри директорий,
# которые начинаются на "h" и МОГУТ содержать ещё один символ после
# Например /images/h4/user.jpg, /images/h/company.jpeg
/images/h?/*.jp?g

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

git remote - позволяет просмотреть какие удалённые серверы у вас уже настроены.

git clone <имя_клонируемого_проекта> <новое_имя_склонированного_проекта> (к примеру на локальной машине)
Git выводит все коммиты в оригинальный репозиторий, но ветки в удаленном репозитории не рассматриваются как локальные. Если мы хотим собственную ветку style, мы должны сами ее создать.
Пример:

1
2
3
4
5
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/style
remotes/origin/master


git fetch [имя удал. сервера] - (имя удалаленного сервера обычно origin) Данная команда связывается с указанным удалённым проектом и забирает все те данные проекта, которых у вас ещё нет. После того как вы выполнили команду, у вас должны появиться ссылки на все ветки из этого удалённого проекта. Теперь эти ветки в любой момент могут быть просмотрены или слиты.

git merge origin/master - сливает изменения, которые есть в удаленной ветки, с origin/master с локально веткой master

git pull - (эквивалентен комбинации git fetch и git merge origin/master)

При клонировании репозитория, как правило, автоматически создаётся ветка master, которая отслеживает origin/master, поэтому git push и git pull работают для этой ветки “из коробки” и не требуют дополнительных аргументов.

git branch --track style origin/style - добовляет локальную ветку style, которая отслеживает изменения удаленной ветки origin/style.


Полезные ссылки:

  1. Подробно о .gitignore
  2. Подробно о git log
  3. Конфигурирование Git
  4. Уроки по Git

Hexo и Markdown

Базовый синтаксис Markdown

<!-- more --> - специальный тэг, поддерживаемый Hexo. Обеспечивает функционал “читать дальше”.

Таблицы

1
2
3
4
5
6
7
8
9
10
11
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
Markdown | Less | Pretty
--- | --- | ---
*Still* | `renders` | **nicely**
1 | 2 | 3

Читать дальше...

Коротко о портах

Порт - число, которое идентифицирует программу, желающую принимать данные из интернета.
Любая программа, стремящаяся передать данные другой, должна занать номер порта,
который закреплен за последней. Диапазон портов от 0 до 65535 (2 байта).

Номера портов разделены на три диапазона:

  1. Системные (от 0 до 1023)
  2. Зарегистрированные (от 1024 до 49151)
  3. Динамические или частные (от 49152 до 65535)

Список системных портов:

  • 21: FTP
  • 22: SSH
  • 25: Простой протокол передачи почты (SMTP).
  • 53: Система доменных имен (DNS).
  • 80: Протокол передачи гипертекста (HTTP).
  • 443: HTTPS (HTTP Secure) криптографический протокол SSL.
  • Полный список портов

Настройка ftp синхронизации в phpStorm

  1. Открываем настройки
    • Для MacOS: PhpStorm/Preferences (⌘+,)
    • Для Windows: File/Settings (ctrl+alt+s)
  2. Открываем: Build,Execution,Deployment / Deployment
  3. Жмем добавить {1}, вводим имя.
  4. Во вкладке Connection заполняем поля: FTP host, Root path, User name, Password
    Root path - папка с проектом на сервере
  5. Сделать данное соединение по умолчанию {2}
  6. Нажать на кнопку “Advanced options…” {3} и в модальном окне поставить галочку “Passive mode”
  7. Переходим во вкладку “Mappings” {4} и заполняем поля (как правило, ничего менять не надо):
    • Local path - папка с локальным проектом
    • Deployment path ….. - папка на сервере
    • Web path ….. - веб путь, по умолчанию /

  • Чтобы включить отображение дерева директорий на сервере надо: Tools/Deployment/Browse Remote Host
  • Чтобы включить автоматическую синхранезацию надо выбрать: Tools/Deployment/Automatic Upload (always)

Полезные ссылки:

  1. Видео урок по phpStorm Про ftp синхронизацию с 3:40 до 22:00

Конфигурирование apache на raspberry pi и не только

Конфигурационные файлы apache:

  • /etc/apache2/apache2.conf - главный конфигурационный файл Apache2. Содержит параметры, которые являются глобальными.
  • /etc/apache2/conf-available - этот каталог содержит доступные конфигурационные файлы.

Настройки php.ini

  1. Чтобы в php скриптах работало <? наравне с <?php необходимо настроить параметр таким образом: short_open_tag = On

Полезные ссылки:

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

Шпора по командам терминала

Консольные команды для Linux

  • chmod 777 -R blog - рекусивно меняем права у папки blog
  • chown -R pi:root blog - рекурсивно меняем владельца у паки blog на pi и группу на root
  • rm -R blog - Удалить папку blog (рекурсивно)
  • rm -R * - Удалить все содержимое текущей папки (рекурсивно)
  • mkdir blog - Создать директорию blog
  • stat blog - Подробная информация о файле/директории
  • mv - Переместить или переименовать файлы
  • nslookup ya.ru - DNS-клиент позволяющий узнать ip адресс сайта и не только

Читать дальше...