Ошибка «Отказано в доступе» в приложении Django, развернутом на Amazon Elastic Beanstalk - PullRequest
2 голосов
/ 05 апреля 2019

Я развернул проект Django (MyProj) на Amazon beanstalk, используя eb CLI. Этот проект физически расположен на ~/MyProj. В нем есть приложение с именем myapp, которое должно выполнять внешние сценарии Python. Для этого у меня есть my_launcher.py в каталоге ~/MyProj/myapp. Фрагмент кода в my_launcher.py is:

import os
import importlib

PROJECTS_DIR = os.path.join(os.path.expanduser(os.environ.get('LOCATION')), 'app/python/')

MY_MODULE = os.path.join(PROJECTS_DIR, 'MyModule/my_script.py')
spec = importlib.util.spec_from_file_location('my_script', My_MODULE)
MyModule = importlib.util.module_from_spec(spec)
spec.loader.exec_module(MyModule)

Причиной использования переменной окружения LOCATION является динамическая установка местоположения внешних скриптов Python. Я определил эту переменную среды и некоторые другие через консоль администратора AWS в разделе Elastic Beanstalk. В моем примере у меня есть:

LOCATION = '/home/ec2-user/company/'

Этот скрипт завершается с ошибкой в ​​последней строке с ошибкой:

PermissionError at /myapp
[Errno 13] Permission denied: '/home/ec2-user/company/app/python/MyModule/my_script.py'

То, что я сделал до сих пор безрезультатно:

  1. После прочтения многих онлайн-страниц (например, Django [Errno 13] В доступе отказано: '/ var / www / media / animals / user_uploads' ), я подумал, что проблема в разрешениях Linux на место, где находятся исполняемые скрипты Python (т. е. /home/ec2-user/company/app/python/). Для проверки этой гипотезы (хотя я знаю, что это плохой подход для производства), я выполнил команду sudo chmod -R 777 company, находясь в каталоге /home/ec2-user. Я повторно развернул проект и даже перезагрузил экземпляр EC2 все вместе. Это не помогло.

  2. Я переместил каталог company в ~/MyProj/myapp (и обновил переменную среды LOCATION на сервере), полагая, что пользователь wsgi не имеет разрешения на выполнение ни в одном каталоге за пределами ~/MyProj/myapp. Это не помогло.

Я очень ценю любую помощь.

Кстати, я использую Python 3.6 и Django 2.1.7.

...