Виталий Серый

Виталий Серый

Был в сети 16 ноября 2021, 22:01
Заказы не принимаю
Алексей
Алексей
после апдейта на 64х битное ядро не дает добавить сайт на Modx через стандартные скрипты установки.
Вернее сайт скачивается, устанавливается, однако при попытке зайти на него через браузер — вылезает 502 ошибка.
В логах nginx для этого домена:
[crit] 29714#0: *277730 connect() to unix:/var/run/php5-domain.sock failed (2: No such file or directory) while connecting to upstream, client: 92.4.9.1, server: domain.ru, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-domain.sock:"
И конечно nginx пишет:
502 Bad Gateway
Кстати, зашел в /var/run/ — посмотрел, там действительно нету файла «php5-domain.sock» — как его там создать? я на сколько понимаю это «процесс» а не «файл».
Василий Наумкин
Василий Наумкин
Не знаю, почему у тебя сломалось только сейчас, но проблема в отключенной функции stream_socket_client().

Она указана у меня в моих скриптах автоустановки, и там я накидал всё потенциально опасное. Очевидно, что если на хостинге работаешь только ты, можно эту строку просто закомментировать.
#php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source,stream_socket_client,stream_set_write_buffer,stream_socket_sendto,highlight_file,com_load_typelib

Вообще, не уверен, что она действительно нужна, учитывая open_basedir, владельца процесса php и выставленные права на файлы.
Iaroslav tkachuk
Iaroslav tkachuk
Возможно будет полезно, в файле core/model/phpthumb/phpthumb.class.php заменить строчку 2126 а именно
$this->thumbnail_image_width = round($this->thumbnail_image_height * $aspectratio);
на
if ( $this->thumbnail_image_width<$this->thumbnail_image_height ){
	$this->thumbnail_image_width = round($this->thumbnail_image_height / $aspectratio);
} else {
	$this->thumbnail_image_width = round($this->thumbnail_image_height * $aspectratio);
}
и надеяться что баг будет исправлен.
Илья Ершов
Илья Ершов
Для потомков:
Предложенный вариант
$cache = $modx->getCacheManager()->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
$key = $modx->resource->getCacheKey();
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);
работает, но как-то странно… я наблюдал, что при первом обновлении страницы после выполнения этого кода — страница всё равно загружается из Кэша, очень похоже, что это был кэш браузера.

А вот такой вариант чистит сразу:
$id=79;
$resource=$modx->getObject('modResource',$id);
$cacheKey = $resource->getCacheKey();
$modx->cacheManager->refresh(array(
    'resource' => array('key' => $cacheKey),
));
Изменения видны при первом же обновлении страницы.

Но в обоих вариантах используется объект cacheManager
Василий Наумкин
Василий Наумкин
Я выставляю пользователю переменную в поле extended профиля, а потом проверяю её при загрузке им страницы.

Если есть — перезагружаю его права.
$extended = $modx->user->Profile->get('extended')) {
if (!empty($extended['updateGroups'])) {
	unset($_SESSION['modx.user.'.$modx->user->id.'.userGroupNames']);
	$extended['updateGroups'] = 0;
	$modx->user->Profile->set('extended', $extended);
	$modx->user->Profile->save();
	
	$ctxQuery = $modx->newQuery('modContext');
	$ctxQuery->select($modx->getSelectColumns('modContext', '', '', array('key')));
	if ($ctxQuery->prepare() && $ctxQuery->stmt->execute()) {
		if ($contexts = $ctxQuery->stmt->fetchAll(PDO::FETCH_COLUMN)) {
			$serialized = serialize($contexts);
			$modx->exec("UPDATE {$modx->getTableName('modUser')} SET {$modx->escape('session_stale')} = {$modx->quote($serialized)}");
		}
	}
}
Олег Трубин
Олег Трубин
Я сделал так. Задача: Нужно разным группам пользователей показывать разные ресурсы.
1. Иду «Безопасность — Группы ресурсов». Создаю группу ресурсов: имя — «vkm-kurs», контекст — «web», ставлю галочку — «Создать параллельную группу пользователей», жму «сохранить»;
2. Прямо там же, перетаскиванием, добавляю в эту группу нужный ресурс;
3. Иду «Безопасность — Контроль доступа». На вкладке «Группы пользователей» щелкаю правой кнопкой по автоматически созданной группе пользователей «vkm-kurs» и выбираю «Добавить пользователя в группу». В появившемся окошке выбираю нужного пользователя и выбираю роль «member» (у неё ранг 9999).
4. Далее, для проверки, опять щелкаю правой кнопкой по группе пользователей «vkm-kurs» и выбираю «Редактировать группу пользователей». На открывшейся страничке, на вкладке «Доступ к группам ресурсов» в табличке вижу запись: Группа ресурсов — «vkm-kurs», минимальная роль — «Member — 9999», Политика доступа — «Resource», Контекст — «web».
5. Далее проверяю её видимость на фронте для анонимов и для нужного юзера. Проверяю в другом браузере — где НЕ залогинен админом — вроде всё работает.