X

Akeneo 5.0 CE: Ошибки при установке

Сегодня для собственных экспериментов устанавливал Akeneo 5.0 CE версию и во время установки столкнулся с ошибками, о решении которых и будет данный пост..

Небольшое вступление

Я решил установить систему не из докер образа, а в ручном режиме.

Для этого я использовал PHP 7.4, Nginx, Elasticsearch и MariaDB. Последняя заявлена как не поддерживаемая, но у меня она уже была установлена и менять ее я не собирался.

Для установки идем вот сюда: https://www.akeneo.com/download/

Заполняем форму рандомными данными и получаем ссылку на скачиваем архива.

Архив, разархивируем в папку и настраиваем php-fpm и nginx.

Конфиг php-fpm у меня был стандартный, конфиг nginx-а минимальный

server {
        listen 80;
        server_name akeneo.sv;
        root /var/www/akeneo.sv/public_html/public;

        error_log /var/www/akeneo.sv/logs/error.log;

        client_max_body_size 128m;

        location / {
                index index.php;
                try_files $uri $uri/ /index.php?$args;
        }

       location ~ .php$ {
            include fastcgi.conf;
            fastcgi_pass unix:/run/php/akeneo.sv-php7.4-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }
}

Далее, заходим в папку с кодом и выполняем следующее

php7.4 /usr/local/bin/composer install --optimize-autoloader --prefer-dist
npm install --force
php7.4 bin/console cache:clear --no-warmup --env=prod
php7.4 bin/console pim:installer:assets --symlink --clean --env=prod
php7.4 bin/console assets:install --symlink public

Далее, все должно было начать работать. Но не заработало, на фронте была ошибка 500 и сообщение про старт сессий после отправки сообщений

Ошибки можно смотреть в логе, вот тут: var/logs/prod.log


Ошибки совместимости

Ошибки совместимости, я увидел когда пытался запустить установку вот так

php7.4 bin/console pim:install --force --symlink --clean --env=prod

Результат


Ошибка: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed

Полный текст ошибки

[2021-07-21 15:29:43] request.CRITICAL: Uncaught PHP Exception PDOException: "SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution" at vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php line 438 {"exception":"[object] (PDOException(code: 2002): SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution at vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php:438, PDOException(code: 0): PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution at vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php:438)"} []

Это ошибка о том, что не настроен коннект к базе

Добавляем нужные настройки базы в файл "/.env", в переменные APP_DATABASE_*. Заодно там же меняем хост эластика в APP_INDEX_HOSTS на localhost и прописываем локальный хост в переменную AKENEO_PIM_URL

APP_ENV=prod
APP_DEBUG=0
APP_DATABASE_HOST=localhost
APP_DATABASE_PORT=null
APP_DATABASE_NAME=akeneo
APP_DATABASE_USER=mysql
APP_DATABASE_PASSWORD=mysql
APP_DEFAULT_LOCALE=en
APP_SECRET=ThisTokenIsNotSoSecretChangeIt
APP_INDEX_HOSTS=localhost:9200
APP_PRODUCT_AND_PRODUCT_MODEL_INDEX_NAME=akeneo_pim_product_and_product_model
APP_CONNECTION_ERROR_INDEX_NAME=akeneo_connectivity_connection_error
MAILER_URL=null://localhost?encryption=tls&auth_mode=login&username=foo&password=bar&sender_address=no-reply@example.com
AKENEO_PIM_URL=http://akeneo.sv
APP_ELASTICSEARCH_TOTAL_FIELDS_LIMIT=10000
FLAG_QUANTIFIED_ASSOCIATION_ENABLED=1
COMM_PANEL_API_URL=https://pim-comm-panel.akeneo.com
FLAG_DATA_QUALITY_INSIGHTS_ENABLED=1
SRNT_GOOGLE_APPLICATION_CREDENTIALS=
GOOGLE_CLOUD_PROJECT=emulator-project
PUBSUB_EMULATOR_HOST=
PUBSUB_AUTO_SETUP=false
PUBSUB_TOPIC_BUSINESS_EVENT=
PUBSUB_TOPIC_JOB_QUEUE=
PUBSUB_SUBSCRIPTION_WEBHOOK=
PUBSUB_SUBSCRIPTION_JOB_QUEUE=
XDEBUG_MODE=off

После этого проблема с базой исчезает


Ошибка: SQLSTATE[42S02]: Base table or view not found

ПОлный текст ошибки

[2021-07-21 15:31:00] request.CRITICAL: Uncaught PHP Exception PDOException: "SQLSTATE[42S02]: Base table or view not found: 1146 Table 'akeneo.pim_session' doesn't exist" at vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php line 625 {"exception":"[object] (PDOException(code: 42S02): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'akeneo.pim_session' doesn't exist at vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php:625, PDOException(code: 42S02): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'akeneo.pim_session' doesn't exist at vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php:625)"} []

Эта ошибка возникает, т.к. база пустая и не содержит таблиц. Эти таблицы нужно создать вот так

php7.4 bin/console pim:installer:db

В конце правда получим ошибку на этапе загрузки фикстур

Reset elasticsearch indexes
Create session table
Create configuration table
Create messenger table
Load jobs for fixtures. (data set: src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal)

In FixturePathProvider.php line 39:
                                             
  Installer data directory cannot be found.  

Но, таблицы создаются, поэтому пока просто игнорируем её и идем дальше


Ошибка: Старница логина загрузилась, но не загружаются стили

Возникает она т.к. нет файла стилей ~/public/css/pim.css

Я попробовал исправить это запустив yarn

yarn run less

Но получил ошибку: Error: Cannot find module 'less'

yarn run v1.22.5
$ node $npm_package_config_styles
internal/modules/cjs/loader.js:638
throw err;
^
Error: Cannot find module 'less'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object. (/vendor/akeneo/pim-community-dev/frontend/build/compile-less.js:6:15)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Чтобы ее исправить я установил less и less-loader

npm install less less-loader --save-dev

После повторного запуска, предыдущие ошибки ушли, но появилась новая: Error compiling less: Error evaluating function `percentage`: argument must be a number

yarn run less

yarn run v1.22.5
$ node $npm_package_config_styles

Starting LESS compilation

‣ vendor/akeneo/pim-community-dev/src/Akeneo/Pim/Structure/Bundle/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Oro/Bundle/PimDataGridBundle/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/UIBundle/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Connectivity/Connection/back/Infrastructure/Symfony/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/CommunicationChannelBundle/back/Infrastructure/Framework/Symfony/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Pim/Automation/DataQualityInsights/back/Infrastructure/Symfony/Resources/public/less/index.less


Error compiling less: Error evaluating function `percentage`: argument must be a number

public/bundles/pimui/lib/bootstrap/less/bootstrap_variables.less:278:26
>// -------------------------
>@fluidGridColumnWidth:    percentage(@gridColumnWidth/@gridRowWidth);
>@fluidGridGutterWidth:    percentage(@gridGutterWidth/@gridRowWidth);

error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Для ее исправления, я открыл файл public/bundles/pimui/lib/bootstrap/less/bootstrap_variables.less в редакторе, нашел указанные строки и обернул их в еще одни скобки, т.е. стало вот так

// Fluid grid
// -------------------------
@fluidGridColumnWidth:    percentage((@gridColumnWidth/@gridRowWidth));
@fluidGridGutterWidth:    percentage((@gridGutterWidth/@gridRowWidth));

// 1200px min
@fluidGridColumnWidth1200:     percentage((@gridColumnWidth1200/@gridRowWidth1200));
@fluidGridGutterWidth1200:     percentage((@gridGutterWidth1200/@gridRowWidth1200));

// 768px-979px
@fluidGridColumnWidth768:      percentage((@gridColumnWidth768/@gridRowWidth768));
@fluidGridGutterWidth768:      percentage((@gridGutterWidth768/@gridRowWidth768));

Это решило проблему в этом месте, но появилась новая: Error compiling less: Operation on an invalid type

yarn run less

yarn run v1.22.5
$ node $npm_package_config_styles

Starting LESS compilation

‣ vendor/akeneo/pim-community-dev/src/Akeneo/Pim/Structure/Bundle/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Oro/Bundle/PimDataGridBundle/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/UIBundle/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Connectivity/Connection/back/Infrastructure/Symfony/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/CommunicationChannelBundle/back/Infrastructure/Framework/Symfony/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Pim/Automation/DataQualityInsights/back/Infrastructure/Symfony/Resources/public/less/index.less


Error compiling less: Operation on an invalid type

./public/bundles/pimui/less/components/Column.less:179:4
>    margin-top: 10px;
>    left: @AknMainMenuWidth + (@littleWidth - @AknDefaultButtonSize) / 2;
>    opacity: 0;

error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

По той же схеме, просто обернул в скобки, получилось так

  &-navigation {
    position: fixed;
    margin-top: 10px;
    left: (@AknMainMenuWidth + (@littleWidth - @AknDefaultButtonSize) / 2);
    opacity: 0;
    transition: opacity @AknColumnTiming @AknColumnTransition;
    z-index: 850;
  }

После этого CSS файл наконец-то успешно сгенерировался

$ yarn run less

yarn run v1.22.5
$ node $npm_package_config_styles

Starting LESS compilation

‣ vendor/akeneo/pim-community-dev/src/Akeneo/Pim/Structure/Bundle/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Oro/Bundle/PimDataGridBundle/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/UIBundle/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Connectivity/Connection/back/Infrastructure/Symfony/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/CommunicationChannelBundle/back/Infrastructure/Framework/Symfony/Resources/public/less/index.less
‣ vendor/akeneo/pim-community-dev/src/Akeneo/Pim/Automation/DataQualityInsights/back/Infrastructure/Symfony/Resources/public/less/index.less


✓ Saved CSS to public/css/pim.css
Done in 2.55s.

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


Ошибка: Не загруженные фикстуры

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

Ошибка у нас была вот такая

$ php7.4 bin/console pim:installer:db --env=prod
...
Load jobs for fixtures. (data set: src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal)

In FixturePathProvider.php line 39:
                                             
  Installer data directory cannot be found.                                               

Немного погуглив, я наткнулся на информацию что их переместили

  • Были тут:
    • src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal/*
  • Теперь тут:
    • vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal/*

Пробуем, просто создать символическую ссылку, чтобы не заморачиваться. Однако, т.к. нам нужны тестовые данные копируем не "minimal" фикстуры, а те, что называются "icecat_demo_dev" и проверяем


$ mkdir -p src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures

$ ln -s `pwd`/vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/icecat_demo_dev `pwd`/src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal

$ ls src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal
association_types.csv  attribute_options.csv  categories.csv  currencies.csv  family_variants.csv  groups.csv       jobs.yml     product_models.csv  user_groups.csv  users.csv
attribute_groups.csv   attributes.csv         channels.csv    families.csv    files                group_types.csv  locales.csv  products.csv        user_roles.csv

Запускаем вновь

$ php7.4 bin/console pim:installer:db --env=prod
...
Load jobs for fixtures. (data set: src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal)
Fixtures fixtures_currency_csv has been successfully executed.
Fixtures fixtures_locale_csv has been successfully executed.
Fixtures fixtures_user_group_csv has been successfully executed.
Fixtures fixtures_category_csv has been successfully executed.
Fixtures fixtures_attribute_group_csv has been successfully executed.
Fixtures fixtures_group_type_csv has been successfully executed.
Fixtures fixtures_attribute_csv has been successfully executed.
Fixtures fixtures_channel_csv has been successfully executed.
Fixtures fixtures_association_type_csv has been successfully executed.
Fixtures fixtures_attribute_options_csv has been successfully executed.
Fixtures fixtures_family_csv has been successfully executed.
Fixtures fixtures_job_yml has been successfully executed.
Fixtures fixtures_family_variant_csv has been successfully executed.
Fixtures fixtures_group_csv has been successfully executed.
Fixtures fixtures_user_role_csv has been successfully executed.
Fixtures fixtures_user_csv has been successfully executed.
Fixtures fixtures_product_model_csv has been successfully executed.
Fixtures fixtures_product_csv has been successfully executed.

Delete jobs for fixtures.
Versioning is already up to date.

фикстуры загрузились, но вылезает новая ошибка: Impossible to get the latest migration Composer detected issues in your platform

На этом этапе может появиться еще одна ошибка: SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION akeneo.JSON_ARRAYAGG does not exist. Она говорит о том, что в ваша версия MySQL/Mariadb устаревшая. Чтобы ее убрать, необходимо обновиться на более новую. Для MariaDB это версия 10.5.0, детали по этим ссылкам

  • https://mariadb.com/kb/en/json_arrayagg/
  • https://mariadb.com/docs/deploy/upgrade-community-server-cs105-ubuntu18/

Ошибка: Impossible to get the latest migration Composer detected issues in your platform

Полный текст ошибки

Delete jobs for fixtures.
Versioning is already up to date.
In DatabaseCommand.php line 360:
[RuntimeException]
Impossible to get the latest migration Composer detected issues in your platform:
Your Composer dependencies require a PHP version ">= 7.4.1". You are running 7.2.34-22+ubuntu20.04.1+deb.sury.org+1.
PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.4.1". You are running 7.2.34-22+ubuntu20.04.1+deb.sury.org
+1. in vendor/composer/platform_check.php on line 24
Exception trace:
at vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/InstallerBundle/Command/DatabaseCommand.php:360
Akeneo\Platform\Bundle\InstallerBundle\Command\DatabaseCommand->getLatestMigration() at vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/InstallerBundle/Command/DatabaseCommand.php:333
Akeneo\Platform\Bundle\InstallerBundle\Command\DatabaseCommand->setLatestKnownMigration() at vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/InstallerBundle/Command/DatabaseCommand.php:206
Akeneo\Platform\Bundle\InstallerBundle\Command\DatabaseCommand->execute() at vendor/symfony/console/Command/Command.php:255
Symfony\Component\Console\Command\Command->run() at vendor/symfony/console/Application.php:1027
Symfony\Component\Console\Application->doRunCommand() at vendor/symfony/framework-bundle/Console/Application.php:97
Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at vendor/symfony/console/Application.php:273
Symfony\Component\Console\Application->doRun() at vendor/symfony/framework-bundle/Console/Application.php:83
Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at vendor/symfony/console/Application.php:149
Symfony\Component\Console\Application->run() at bin/console:36

Появляется, т.к. у меня стоит по-умолчанию в системе php7.2 и хотя я запускаю консольную команду от php7.4 внутренние процессы не могут этого понять и тригерят php установленный по-умолчанию

php7.4 bin/console pim:installer:db --env=prod

Чтобы исправить это на время инсталяции я поменял дефолтную версию php

$ sudo update-alternatives --config php

here are 7 choices for the alternative php (providing /usr/bin/php).

  Selection    Path                  Priority   Status
------------------------------------------------------------
  0            /usr/bin/php.default   100       auto mode
  1            /usr/bin/php.default   100       manual mode
  2            /usr/bin/php5.6        56        manual mode
  3            /usr/bin/php7.0        70        manual mode
* 4            /usr/bin/php7.2        72        manual mode
  5            /usr/bin/php7.3        73        manual mode
  6            /usr/bin/php7.4        74        manual mode   // выбрал эту
  7            /usr/bin/php8.0        80        manual mode


$ php -v
PHP 7.4.20 (cli) (built: Jun  4 2021 21:24:55) ( NTS )

На этот раз все прошло успешно. Т.к. мне нужен PHP 7.2 для других дел, то я вернулся тем же способом к этой версии.


Заключение

Ручная установка Akeneo 5 CE оказалась довольно не простой штукой, особенно когда у тебя несколько версий PHP и не совсем подходящая версия базы. Поэтому, думаю, намнеого проще использовать докер, где не придется бороться с зависимостями версий.

Ах да, данные для авторизации admin/admin, другие учетки можно посмотреть в фикстуре users.csv

Категории: Akeneo PIM Бездна