Функция для установки пакетов:
Код: Выделить всё
import os
import sys
import subprocess
import logging
logger = logging.getLogger("general_log")
def install_app_packages():
"""
Run poetry install to update application packages
"""
python_path = sys.executable
current_dir = os.path.dirname(os.path.realpath(__file__))
project_directory = os.path.dirname(current_dir)
poetry_install_command = "poetry install --with prod --no-root"
activate_path = f"{python_path[:-7]}/activate"
export_poetry = 'export PATH="/opt/apps/venv/poetry/bin:$PATH"'
full_command = f"{export_poetry} && source {activate_path} && {poetry_install_command}"
try:
subprocess.run(
full_command,
shell=True,
cwd=project_directory,
executable="/bin/ash"
)
return True
except Exception as e:
logger.error(f"Error while running Poetry Install: {e.__str__()}")
return False
Код: Выделить всё
[2024-07-29 12:53:01 +0300] [24580] [INFO] Using worker: sync
[2024-07-29 12:53:02 +0300] [24581] [INFO] Booting worker with pid: 24581
Installing dependencies from lock file
Package operations: 1 install, 0 updates, 0 removals
- Installing semver (3.0.2)
PermissionError
[Errno 13] Permission denied: '/root/.config/python_keyring/keyringrc.cfg'
at /usr/lib/python3.11/pathlib.py:1013 in stat
1009│ """
1010│ Return the result of the stat() system call on this path, like
1011│ os.stat() does.
1012│ """
→ 1013│ return os.stat(self, follow_symlinks=follow_symlinks)
1014│
1015│ def owner(self):
1016│ """
1017│ Return the login name of the file owner.
Cannot install semver.
[2024-07-29 12:53:03 +0300] [24580] [ERROR] Worker (pid:24581) exited with code 3
[2024-07-29 12:53:03 +0300] [24580] [ERROR] Shutting down: Master
[2024-07-29 12:53:03 +0300] [24580] [ERROR] Reason: Worker failed to boot.
1. Установка работает при прямом вызове с помощью Gunicorn
Когда я запускаю приложение напрямую с помощью Gunicorn, работая от имени того же пользователя app_user, оно успешно устанавливается.< /p>
Код: Выделить всё
(poetry-venv)project_directory$ gunicorn --bind 0.0.0.0:8030 server.wsgi --error-logfile /tmp/gunicorn_error.log --access-logfile /tmp/gunicorn_access.log --preload
в файле конфигурации супервизора для приложения, если я укажу user=root и group=root вместо app_user, установка также прошла успешно.
Так что интересно, что здесь может быть шаткого. Разрешения приложения или какие-то настройки поэзии? Почему скрипт пытается найти keyringrc.cfg под root, но «root» здесь не используется?
У меня ранее был вопрос о разрешениях, но я не нашел ответа . Может ли это быть связано?
Подробнее здесь: https://stackoverflow.com/questions/788 ... script-usi