Всем привет.
Хочу сделать SaaS (Sowtware as a Service) на базе yii2. Точнее сказать, уже делаю.
Дошёл до вопроса версионирования: в Yii2 уже есть какая-то заготовка для этого, или лучше писать самому?
Ну и попутно может подскажете, как лучше реализовать функцию обновления файлов сайта? опыта в этом нет, но мне кажется что нужно держать где-то "полуфабрикатную" версию файлов сайта, без файла конфига. в нужный момент запускать скрипт, который скачает на сервер "полуфабрикат" и распакует его, таким образом обновив файлы. а как быть с базой данных? что, если нужно добавить новые таблицы, столбцы в них? есть ли какое-то готовое решение, чтобы "скормить" скрипту эталонную таблицу, а скрипт дополнит текущую таблицу до эталонной - естественно, без потери данных?
Версионирование
- proctoleha
- Сообщения: 298
- Зарегистрирован: 2016.07.10, 19:00
Re: Версионирование
Учим GITTopClans писал(а): ↑2019.09.25, 01:14 ...как лучше реализовать функцию обновления файлов сайта? опыта в этом нет, но мне кажется что нужно держать где-то "полуфабрикатную" версию файлов сайта, без файла конфига. в нужный момент запускать скрипт, который скачает на сервер "полуфабрикат" и распакует его, таким образом обновив файлы. ...
Откройте для себя миграции: https://yiiframework.com.ua/ru/doc/guid ... igrations/
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
Re: Версионирование
спасибо, git оказался проще чем я думал. и удобней)
раз уж на то пошло, то может кто-нибудь подскажет, как лучше реализовать запуск обновления через сам сайт? по сути нужно запустить код который перейдёт в директорию с сайтом и запустит git pull. а в идеале - дождаться окончания git pull и запустить php скрипт для того чтобы отправить комет в браузер клиента и там обновилась страничка.
я, к сожалению, не сильно с этой областью - можно это делать через PHP и exec, или для работы с командной строкой нужно что-то другое? может на питоне там скрипт какой-то написать
раз уж на то пошло, то может кто-нибудь подскажет, как лучше реализовать запуск обновления через сам сайт? по сути нужно запустить код который перейдёт в директорию с сайтом и запустит git pull. а в идеале - дождаться окончания git pull и запустить php скрипт для того чтобы отправить комет в браузер клиента и там обновилась страничка.
я, к сожалению, не сильно с этой областью - можно это делать через PHP и exec, или для работы с командной строкой нужно что-то другое? может на питоне там скрипт какой-то написать
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Версионирование
https://gist.github.com/noelboss/3fe139 ... 2e9066f2fa
Не забудьте, что еще надо выполнять composer install
Не забудьте, что еще надо выполнять composer install
Re: Версионирование
https://robo.li/TopClans писал(а): ↑2019.09.27, 14:58 спасибо, git оказался проще чем я думал. и удобней)
раз уж на то пошло, то может кто-нибудь подскажет, как лучше реализовать запуск обновления через сам сайт? по сути нужно запустить код который перейдёт в директорию с сайтом и запустит git pull. а в идеале - дождаться окончания git pull и запустить php скрипт для того чтобы отправить комет в браузер клиента и там обновилась страничка.
я, к сожалению, не сильно с этой областью - можно это делать через PHP и exec, или для работы с командной строкой нужно что-то другое? может на питоне там скрипт какой-то написать
Re: Версионирование
сделал по-колхозному:
Код: Выделить всё
Class MyController extends AppController
{
public function actionIndex()
{
function cidr_match($ip, $ranges)
{
$ranges = (array)$ranges;
foreach($ranges as $range) {
list($subnet, $mask) = explode('/', $range);
if((ip2long($ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($subnet)) {
return true;
}
}
return false;
}
$github_ips = array('207.97.227.253', '50.57.128.197', '108.171.174.178', '50.57.231.61');
$github_cidrs = array('204.232.175.64/27', '192.30.252.0/22');
if(in_array($_SERVER['REMOTE_ADDR'], $github_ips) || cidr_match($_SERVER['REMOTE_ADDR'], $github_cidrs)) {
$dir = Yii::getAlias('@app');
exec('cd '.$dir.' && git pull https://<login>:<pass>@<repo> <brunch> 2>&1'); //хранить пароль в открытом виде в коде - очень тупо!
}
else {
header('HTTP/1.1 404 Not Found');
echo '404 Not Found.';
exit;
}
}
}