AWS Elastic Beanstalk: не удается установить mysqlclient

Я просматриваю добавление базы данных в документацию по эластичному beanstalk python, но выполнение шагов приводит к следующей ошибке

2023/05/07 14:06:36.847596 [ERROR] An error occurred during execution of command [app-deploy] - [InstallDependency]. Stop running the command. Error: fail to install dependencies with requirements.txt file with error Command /bin/sh -c /var/app/venv/staging-LQM1lest/bin/pip install -r requirements.txt failed with error exit status 1. Stderr:  error: subprocess-exited-with-error
  
  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [18 lines of output]
      /bin/sh: line 1: mysql_config: command not found
      /bin/sh: line 1: mariadb_config: command not found
      /bin/sh: line 1: mysql_config: command not found
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
        File "<pip-setuptools-caller>", line 34, in <module>
        File "/tmp/pip-install-7hpz1pvs/mysqlclient_f18de82744fa43e9b3b8706c3e581791/setup.py", line 15, in <module>
          metadata, options = get_config()
                              ^^^^^^^^^^^^
        File "/tmp/pip-install-7hpz1pvs/mysqlclient_f18de82744fa43e9b3b8706c3e581791/setup_posix.py", line 70, in get_config
          libs = mysql_config("libs")
                 ^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-install-7hpz1pvs/mysqlclient_f18de82744fa43e9b3b8706c3e581791/setup_posix.py", line 31, in mysql_config
          raise OSError("{} not found".format(_mysql_config_path))
      OSError: mysql_config not found
      mysql_config --version
      mariadb_config --version
      mysql_config --libs
      [end of output]

Я немного покопался и пришел к выводу, что mysql или mariadb не установлены в экземпляре ec2. Итак, я начал просматривать доступные пакеты для Amazon Linux 2023 AMI, поскольку мой ec2 работает с этой версией, и изменил мою конфигурацию в папке .ebextensions, чтобы она выглядела следующим образом:

packages:
  yum:
    mysql-selinux: []
    mariadb105: []
    mariadb-connector-c: []
container_commands:
  01_migrate:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
    leader_only: true
  02_createsuperuser:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py createsuperuser --noinput --username aradipatrik2 --email [email protected]"
    leader_only: true
  03_save_data_to_db:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py save_data_to_db"
    leader_only: true
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: env_info.settings

Пакеты успешно установлены, но я все равно получаю ту же самую ошибку. Когда я подключаюсь по ssh к устройству ec2, чтобы вручную установить mysql или mariadb, терминал говорит мне:

Изменения, сделанные через SSH БУДЕТ ПОТЕРЯН, если экземпляр будет заменен автомасштабированием

Итак, мой вопрос: Как я могу установить mysql или mariadb на экземпляр ec2 при развертывании приложения с помощью эластичного beanstalk, чтобы я мог иметь mysqlclient==2.0.3 внутри своего requirements.txt

Мой requirements.txt

asgiref==3.6.0
branca==0.6.0
certifi==2022.12.7
charset-normalizer==3.1.0
Django==4.2.1
folium==0.14.0
idna==3.4
Jinja2==3.1.2
MarkupSafe==2.1.2
numpy==1.24.3
python-dotenv==1.0.0
requests==2.29.0
sqlparse==0.4.4
tzdata==2023.3
urllib3==1.26.15
mysqlclient==2.0.3

edit: получен отзыв об установке пакета mariadb с именем, оканчивающимся на -dev или -devel, но такого пакета нет в списке доступных пакетов для Amazon Linux 2023 AMI, любые дополнительные указатели будут оценены!

Скорее всего, вам понадобится пакет MySQL или mariadb с именем, оканчивающимся на -dev или -devel.

ysth 08.05.2023 08:07
docs.aws.amazon.com/linux/al2023/release-notes/… Это должен быть список всех доступных пакетов для ОС моего экземпляра ec2. Я не могу найти там такой пакет. Не могли бы вы поделиться, где я могу найти эти пакеты и как их установить?
A. Patrik 08.05.2023 09:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
120
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После некоторых проб и ошибок я изменил свой файл конфигурации, чтобы начать с этого, что решило мою проблему.

packages:
  yum:
    mariadb105-devel: []

Я нашел пакет совершенно случайно. Если кто-то знает, как открыть их для будущего, пожалуйста, скажите мне

Спасибо! Только что провел день, пытаясь заставить flask_mysqldb хорошо работать в приложении Flask в ELB. Это помогло.

user803592 16.05.2023 10:00

Они действительно должны обновить свою документацию. Очень плохо, что точное следование их документации шаг за шагом приведет к трудно отслеживаемым ошибкам...

A. Patrik 17.05.2023 06:29

Другие вопросы по теме