Д9, обновление, сайт упал. Аларм!

Аватар пользователя artomas artomas 1 июня в 19:56

Добрый вечер.

Д9 + Композер. Копия сайта обновлена на тестовом хосте, хостер вообще другой для теста. На тесте все работает, никаких проблем. На бою сайт лежит. Копия полная. Сравнил .htaccess -- никакой разницы в исходнике (до обновлений) и в текущей версии. Соответственно все подключения в settings изменены. Ошибка вообще 500, это не ругань на что-то типа трастед_хостс. Ошибка ниже. Буду очень признателен, если кто направит. Я просто не понимаю: кучу раз переносил на другие хосты, никаких ошибок такого рода не встречал. Читаю пока сам по Гуглу, но время важно. Кстати, параллельно делались обновления на бою (потом откатывали, упал тоже). На тест закинул именно на всякий случай, обновил -- гуд, потом на бою -- упал. Все обновления сделаны на тесте, решено просто перенести версию на бой, но она и упала тоже.

PHP Fatal error: Declaration of Symfony\\Component\\DependencyInjection\\ServiceLocator::has(string $id) must be compatible with Psr\\Container\\ContainerInterface::has($id) in /home/i/irservice/u/vendor/symfony/dependency-injection/ServiceLocator.php on line 46

Комментарии

Аватар пользователя artomas artomas 1 июня в 20:14

Так все взято с исходника, все после обновлений работает на тесте. На тесте 7.4, в composer.json указано "php": ">=7.3",. Из этого понимаю, что ПХП не мешает тут. Работает же на тесте)))

Аватар пользователя vlucas vlucas 1 июня в 20:19

php версии (в том числе и cli) должны быть одинаковыми в тестовой и боевой среде

Аватар пользователя artomas artomas 1 июня в 20:22

Поясните. Взято с боя, на тесте гуд -- обносилось и версии не хватает? Повышать просто на бою надо?

Аватар пользователя vlucas vlucas 1 июня в 20:25

версии должны быть одинаковые.
И если вы качали пакеты композером(cli) для одной версии, а запускаете на другой - то это непорядок.

Аватар пользователя artomas artomas 1 июня в 20:48

Не понимаю формулировку. Если дело именно в версиях, ее можно (вероятно) поднять. Вот и спрашиваю.

Аватар пользователя ivnish ivnish 1 июня в 20:52

Смысл разделения дева и прода в том, что они должны быть идентичны по всем параметрам. Особенно важны одинаковые версии веб-сервера, php, субд.

Если на деве всё работает, а на проде нет, логично, что на деве окружение лучше настроено и на проде нужно настроить аналогично

Аватар пользователя artomas artomas 1 июня в 21:05

Таймвеб.
Суппорт пишет версия в консоли -- ерунда. Для сайтов стоит "выше". Есть опыт с ним? Прошу прощения, но есть желание победить, а не тупо "сами разбирайтесь с хостом".

Аватар пользователя artomas artomas 1 июня в 21:25

И все-таки. В доп.

На проде тоже давали обновление, ничего вообще не менялось где-либо, просто апдейт посредством Композера. И упал же сайт. Тест тут, как понимаю вообще не играет роли. Окружение ведь одно. Да, использовалась версия при обновлении принудительно, но сам хостер дал инструкцию. А по поводу версии там 7.4 включена. Нихрена не понимаю...

Аватар пользователя artomas artomas 1 июня в 20:19

php --version:
PHP 7.1.33 (cli) (built: Apr 16 2014 07:06:24) ( NTS )

Момент с версией был, но обновлялось на бою, что потом откатывали, именно с указанием версии. Все равно упал.

Аватар пользователя artomas artomas 1 июня в 20:10

Композер. Там сайт изначально, как понимаю, был без него. Но сейчас... да собственно он же у меня на хосте работает, блин.

Аватар пользователя marassa marassa 1 июня в 20:17

Да я не вникал, просто нагуглилось за пять секунд что у людей такие же проблемы. Вдруг поможет. Нет сейчас времени глубоко погружаться, извините.

Аватар пользователя ivnish ivnish 1 июня в 20:19

Проверь наличие этого пакета на тесте и проде.

Окружения, кстати, идентичные?

Аватар пользователя artomas artomas 4 июня в 0:37
1

Итого.
На хостере (Таймвеб) поддержка -- ерунда, только деньги берут. Если кто имеет опровержение, велкам.
Перенесено на другой хост -- все работает и обновляется даже (без тестов прям, продом был текущий НС).

Резюме.
Вообще не вижу смысла такие танцы выделывать: хостеров полно, кто обещает и действительно поддерживает Д9. Сменили два хостера, два дня ушло. ЗАЧЕМ?

Аватар пользователя kom177 kom177 18 июня в 10:12

А поподробней, пожалуйста.
Что на что обновляли?
В какой момент падает?
У меня ровно вчера - один в один после 9.1.10 --> 9.2.0 композером и последующего update.php (drush updb на проде не работает, но это отдельная история). Конфигурации дев/прод идентичны, насколько возможно. Девятку обновлял уже много раз, в том числе и 9.0 --> 9.1. Никогда такого не было! Smile
И да, это Таймвеб!

Аватар пользователя ivnish ivnish 18 июня в 10:18

При чем тут таймвеб? Вы обновляетесь на проде без предварительного тестирования на локалке/деве/стейдже?

Аватар пользователя kom177 kom177 18 июня в 10:24

Конечно же с предварительным тестированием, это само собой разумеется. Возможно, я не совсем внятно написал "один в один". На локалке все прекрасно. Причем тут таймвеб, не знаю, но совпадение выглядит слегка странным. Почему и спрашиваю, что конкретно делал топикстартер.

Аватар пользователя artomas artomas 18 июня в 10:46

Да переехали просто на другой хостинг. Их полно сейчас достойных. И с нормальным суппортом.
Весь список обновлений уже не помню, но по ядру: обновлялось с чего-то на предыдущую (от текущей соответственно). Конечно все тестировалось, бэкапилось, но... На новом хостинге поднялся за пять минут (буквально).

Аватар пользователя kom177 kom177 18 июня в 10:58

Ну, 1 июня вы могли обновляться только на 9.1.9. Вы же с девятки обновлялись? То есть, получается, 9.1.х на 9.1.9? У меня это обновление без проблем прошло, специально посмотрел по коммитам, 29 мая дело было. Внутри таймвеба с тех пор никуда не переезжал. Потом еще 9.1.10 было, тоже без проблем. И на тебе. Хостера менять не готов, пока не будет однозначно указано на то, что эффект связан только с ним.

Аватар пользователя artomas artomas 18 июня в 11:41

Получается, так. А хостера менять я и не предлагаю. Мне нужно было вернуть в работу сайт, который был на тесте обновлен, на локали обновлен и доделан по задачам. Человеку нужно было не терять времени и он согласился переехать на хостера, у которого мои тесты размещены и его сайт на них работает без проблем.

Аватар пользователя kom177 kom177 18 июня в 12:07

Ну, пока я не вижу проблемы с тем, чтобы "вернуть в работу сайт" за 5 минут даже в этом случае через "гит резет хард". Хотя, конечно, это довольно досадно. В любом случае, сделать эту операцию и потом спокойно разбираться в причинах сбоя, выглядит немного предпочтительнее, чем каждый раз метаться в поисках нового хостера.

Аватар пользователя kom177 kom177 18 июня в 15:13

У меня последний вопрос на сегодня: вы просто core используете, или core-recommended?
Мне интересно, когда у вас обновился (и обновился ли) psr/container до 1.1.1. Это может объяснить, почему у нас с вами не совпадает ни время появления косяка, ни версия D9 на которой это проявляется.

Аватар пользователя kom177 kom177 18 июня в 16:46

Спасибо, тогда ответственность psr/container, по-видимому, следует исключить, поскольку в вашем случае он не должен был обновляться. Поищу в другом месте.

Аватар пользователя kom177 kom177 22 июня в 21:17

Проблема локализована, расходимся.
В принципе, для решения не нужно было бы не только менять провайдера, но и даже тревожить техподдержку. Но мне этот вариант не очень подходит, об этом ниже.
Итак.
1. Еще раз провел контрольный экперимент на нулевую гипотезу "кривых рук". То есть, воспроизвел обновление постадийно, не спеша, с обязательной очисткой всех кэшей на продакшене перед composer install и после. Ошибка 500 воспроизвелась с вышеуказанным "must be compatible..." и т.д.
2. Далее, после отката обратно локалки и прода через git reset и composer install, перевел сайт на Таймвебе с PHP 7.4 на PHP 8, в котором расширение psr отсутствует, и прогнал апдейт еще раз.
Все: страница update.php загружается, предлагаются все необходимые 8 апдейтов БД. Дальше проверять не стал, чтобы не откатывать еще и БД продакшена.
Вердикт, вынесенный выше верен: мешает устаревшее расширение psr версии 1.0.0 в РНР 7.4 на хостинге, конфликтуя с пакетами друпала. Техподдержку, к сожалению, пинать придется, поскольку лично мне PHP 8.0 пока преждевременен.
PS. Почему у топикстартера этот косяк случился раньше, до выхода D9.2.0, учитывая, что у него core-recommended, мне неведомо, возможно, что эти обновленные пакеты psr тянулись зависимостями какого-то модуля или же core-dev.

Аватар пользователя artomas artomas 22 июня в 21:34

Я впечатлен вашими стараниями. Но уйду туда, куда вам явно не хочется)
Зачем пинать тех, кому пофиг? Ну, сдохла лошадь, там нечего ее пинать. Хостеров полно. Если тут не работает, а поддержка так себе (как мин), есть другие хостеры, которые все либо держат в норме, либо готовы помогать. У меня времени и желания разбирать чужие косяки никакого нет. ЗАЧЕМ? Можно не отвечать, вопрос в воздух)))

Аватар пользователя kom177 kom177 22 июня в 23:17

Да ну какие это старания. Делов на 10 минут. Или 5. Была бы возможность сейчас включить PHP 8.0 вообще не стоило бы обсуждения.

Аватар пользователя kom177 kom177 4 июля в 14:40

Финально отчитываюсь. Попросил техподдержку Таймвеб либо перенести на другой сервер с PHP 7.4, но без установленного psr, либо решить иным способом. Решили обновлением psr/container, установленном в PHP 7.4 хостинга до версии 1.1.1 (psr/cache не трогали). Все заработало, все обновляется.
Топикстартеру пожелание успехов в решении любых проблем путем смены хостинга. И еще: никогда не тяните dev-пакеты на продакшен. Для этого есть ключ композера --no-dev.

Аватар пользователя artomas artomas 4 июля в 19:25

Ну, уж тогда и я зафиналю.
Смена хостера -- отличная мера, которая основана на конкуренции. Частью ее является хороший суппорт. У меня нет ни времени, ни желания потратить несколько дней на решение проблемы с хостингом, как у вас. Копать можно что-то существенное, но эту ерунду. Вам тоже удачи в поиске всех решений всегда.

Аватар пользователя artomas artomas 4 июля в 23:40

+1

Повтор))) Не буду уж хостера называть))) Но другой.

Вот у меня вопрос: если есть те, кто, как минимум, решают проблему быстро (или, вдруг, даже не допускают ее; psr необходимость обсуждать смысла не вижу, если кто против, велкам), нафига тратить уже два часа на решение? Серьезно. Если у вас вода ржавая в кране, а есть другой поставщик, у кого чистая, вы будете разбираться с инфраструктурой первого? Может и сложный пример, но решения явное. И это не вода, а куча поставщиков. У многих сантехники гораздо лучше.

И я, почти уверен, решение "не найдется" к утру. А то и вообще "не найдется". Так что разбирайтесь, если есть время и желание. Но, на мой взгляд, это работа на чужой доход: им пофиг на инфраструктуру, на тикеты, на репутацию уж даже. А вы копаете ради "найти". Если подтвердится решение (даже если хостер "не сможет решить"))), напишу о нем. Но. Конкуренция спасет все то, где она есть.