Советы по работе с yii2-basic

Обсуждение документации второй версии фреймворка. Переводы Cookbook и авторские рецепты.
Ответить
goaf
Сообщения: 3
Зарегистрирован: 2018.07.25, 16:14

Советы по работе с yii2-basic

Сообщение goaf » 2019.02.04, 16:30

День добрый! Раньше работал с шаблоном advanced, и поэтому вся разработка подстроена под этот шаблон. Так как возникла необходимость в простом приложении, то решил использовать шаблон проще - basic. Думал, что это то же самое, только в два раньше меньше), но это не так.
Если в расширенном конфиг состоит из двух частей - основных параметров и локальных (файлы которых генерируются заранее), то в базовом только один тип. Как при этом строится версионирование? Допустим, на примере git.
Как в таком случае разворачивать проект? Кто может, поделитесь опытом.
И еще: почему в базовом отказались от локальных настроек?

Аватара пользователя
ElisDN
Сообщения: 5110
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Советы по работе с yii2-basic

Сообщение ElisDN » 2019.02.04, 22:50

Не отказались, а вообще не добавляли. Оставили приложение слишком basic.

А так такое же разделение сами делаем.

Аватара пользователя
SiZE
Сообщения: 2641
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Советы по работе с yii2-basic

Сообщение SiZE » 2019.02.05, 09:03

goaf писал(а):
2019.02.04, 16:30
Если в расширенном конфиг состоит из двух частей - основных параметров и локальных (файлы которых генерируются заранее), то в базовом только один тип. Как при этом строится версионирование? Допустим, на примере git.
Как в таком случае разворачивать проект? Кто может, поделитесь опытом.
Для yii2-app-advanced нижеследующее тоже необходимо, чтобы не хранить пароли и тп в git.

1. Добавляем поддержку .env

Код: Выделить всё

composer require vlucas/phpdotenv:~3.3.2
2. /web/index.php

Код: Выделить всё

<?php
require __DIR__ . '/../vendor/autoload.php';

// putenv не рекомендую, т.к. на мультипоточных системах с ним есть проблемы
// _SERVER так же не рекомендую именно для Yii, т.к. переменная часто логируется, а с ней и все ваши пароли, нам это ни к чему
$factory = new Dotenv\Environment\DotenvFactory([
    new Dotenv\Environment\Adapter\EnvConstAdapter()
]);
// для предотвращения скачивания .env файла выносим его за пределы DOCUMENT_ROOT (/web/), т.е. в корень проекта
// если есть возможность, так же добавить запрет на доступ к .env файлу в конфиге веб сервера
$dotenv = Dotenv\Dotenv::create(__DIR__ . '/..', null, $factory);

defined('YII_DEBUG') or define('YII_DEBUG', (bool) $_ENV['YII_DEBUG']);
defined('YII_ENV') or define('YII_ENV', $_ENV['YII_ENV']);

require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
$config = require __DIR__ . '/../config/web.php';
(new yii\web\Application($config))->run();
3. /.env
В этом файле хранить только sensitive data: пароли, ключи. Остальные настройки, стараемся менять в конфигах через YII_DEBUG, YII_ENV_PROD, YII_ENV_DEV.

Код: Выделить всё

# 1-true, 0-false
YII_DEBUG = 1
YII_ENV=dev
По завершении создания .env файла, можно скопировать его в .env.example удалив sensitive data и поместив в git в качестве примера.

4. Добавить в .gitignore 5. /config/web.php

Код: Выделить всё

<?php
use yii\helpers\ArrayHelper;

$params = require __DIR__ . '/params.php';
$db = require __DIR__ . '/db.php';

$config = [
    // конфиг...
];

if (YII_ENV_PROD) {
    $config = ArrayHelper::merge($config, [
    ]);
    // или
    $config['key1']['key2'] = 'value';
} elseif (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = [
        'class' => 'yii\debug\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
        //'allowedIPs' => ['127.0.0.1', '::1'],
    ];
    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
        //'allowedIPs' => ['127.0.0.1', '::1'],
    ];
}

return $config;

goaf
Сообщения: 3
Зарегистрирован: 2018.07.25, 16:14

Re: Советы по работе с yii2-basic

Сообщение goaf » 2019.02.05, 16:40

Благодарю за подробные ответы!

Аватара пользователя
proctoleha
Сообщения: 224
Зарегистрирован: 2016.07.10, 19:00

Re: Советы по работе с yii2-basic

Сообщение proctoleha » 2019.02.06, 04:52

В случае с гитом, все ровно так же, как в любом приложении не на yii2 advanced. В advanced приложении за нас все любезно расписали заранее: вот вам 150тысячпятьсот конфигов для разного окружения, изначально часть из них под игнором, и никогда не попадет в публичный репозиторий.

В обычном приложении, необязательно на php, необязательно на yii2.
Я развернул приложение, и начинаю смотреть: ага, вот эти файлы у меня должны быть заигнорены. Я их переношу, пока, в др. место, добавляю в .gitignore, делаю коммит, возвращаю файлы на место.
Во время разработки тоже самое. Ага, у меня щас будет создан новый файл, но я его хочу заигнорить. Прописываю этот файл в .gitignore, делаю коммит, и только потом создаю.

А для того, чтобы не было геморроя при развертывании, создаю файлы типа example_db.php, они не под игнором.
Вот за что я не люблю линукс, так это за свои кривые, временами, руки

Аватара пользователя
SiZE
Сообщения: 2641
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Советы по работе с yii2-basic

Сообщение SiZE » 2019.02.06, 20:48

proctoleha писал(а):
2019.02.06, 04:52
В advanced приложении за нас все любезно расписали заранее: вот вам 150тысячпятьсот конфигов для разного окружения, изначально часть из них под игнором, и никогда не попадет в публичный репозиторий.
Вы присмотритесь внимательно. Все конфиги адваседа лежат в гите. Те что под игнором, перезаписываются из enviroments. Что сути не меняет. Кто то постоянно init запускает.

Аватара пользователя
proctoleha
Сообщения: 224
Зарегистрирован: 2016.07.10, 19:00

Re: Советы по работе с yii2-basic

Сообщение proctoleha » 2019.02.07, 15:38

SiZE писал(а):
2019.02.06, 20:48
Вы присмотритесь внимательно. Все конфиги адваседа лежат в гите. Те что под игнором, перезаписываются из enviroments. Что сути не меняет. Кто то постоянно init запускает.
Не сочтите за хамство, или недоброжелательность. В свое время был популярен анекдот, что кто-то и гланды, и аппендицит через опу вырезает :)

Мне проще явно прописать заигноренные файлы из my_file_example, чем помнить какой конфиг какой переписывает. Также и init проще прописать самому под каждый конкретный проект.
Тем более, например, у нас в компании есть три сервера: local (localhost), dev с реальным ip и доменным именем, production. Как отработает команда init в yii2 advanced приложении на dev сервере из коробки? Она мне развернет, по умолчанию, если не ошибаюсь, prod окружение. А оно мне надо потом вручную все настраивать?

Т.е. оптимальным получается, только щас сообразил, хранить все настройки в .env файле, как вы и написали. В этом случае структура приложения может быть абсолютно одинаковой и на local, dev, prod серверах, переписываем только .env файл. Ну и команду init тоже ручками придется написать. Но, она точно будет одинаковой везде, т.к. настройки будет брать из одного файла.
Вот за что я не люблю линукс, так это за свои кривые, временами, руки

Аватара пользователя
SiZE
Сообщения: 2641
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Советы по работе с yii2-basic

Сообщение SiZE » 2019.02.07, 15:57

proctoleha писал(а):
2019.02.07, 15:38
Тем более, например, у нас в компании есть три сервера: local (localhost), dev с реальным ip и доменным именем, production. Как отработает команда init в yii2 advanced приложении на dev сервере из коробки? Она мне развернет, по умолчанию, если не ошибаюсь, prod окружение. А оно мне надо потом вручную все настраивать?
Все окружения, которые вам необходимы, вы как раз должны описать в enviroments/index.php (в т.ч. файлы которые будут развернуты). При деплое вы явно указываете какое из окружений вам необходимо. Шаблон это не фреймворк, как только вы его себе склонировали он ваш, как тарелка борща в ресторане. Поэтому вопроса " Как отработает команда init в yii2 advanced приложении на dev сервере из коробки?" вообще не должно возникать.
proctoleha писал(а):
2019.02.07, 15:38
Т.е. оптимальным получается, только щас сообразил, хранить все настройки в .env файле, как вы и написали. В этом случае структура приложения может быть абсолютно одинаковой и на local, dev, prod серверах, переписываем только .env файл. Ну и команду init тоже ручками придется написать. Но, она точно будет одинаковой везде, т.к. настройки будет брать из одного файла.
Я придерживаюсь мнения, что в .env должна лежать только конфиденциальная информация (логины, пароли, ключи и тп) и настройки влияющие на окружение (отображение ошибок, уровень логирования и тп). Он потому и называется enviroments. К тому же .env предполагает только строковые ключ=значение, этим и надо пользоваться и не надо переносить туда всю конфигурацию.

Аватара пользователя
proctoleha
Сообщения: 224
Зарегистрирован: 2016.07.10, 19:00

Re: Советы по работе с yii2-basic

Сообщение proctoleha » 2019.02.07, 16:55

SiZE писал(а):
2019.02.07, 15:57
Я придерживаюсь мнения, что в .env должна лежать только конфиденциальная информация (логины, пароли, ключи и тп) и настройки влияющие на окружение (отображение ошибок, уровень логирования и тп). Он потому и называется enviroments. К тому же .env предполагает только строковые ключ=значение, этим и надо пользоваться и не надо переносить туда всю конфигурацию.
Так оно и есть. Абсолютно согласен. Конфиг это конфиг, настройки окружения - это настройки окружения. Конфиг формируем тем, или иным способом, в зависимости от настроек окружения.

Вот я развернул приложение на dev сервере. Прописал настройки среды в .env файле, используя файл example.env, и запустил init. То же самое и др. окружениях. Конфигурация окружения везде будет разная (логины, пароли, ключи и тп).
Вот за что я не люблю линукс, так это за свои кривые, временами, руки

Ответить