Я развернул проект 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'
То, что я сделал до сих пор безрезультатно:
После прочтения многих онлайн-страниц (например, 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 все вместе. Это не помогло.
Я переместил каталог company
в ~/MyProj/myapp
(и обновил переменную среды LOCATION
на сервере), полагая, что пользователь wsgi
не имеет разрешения на выполнение ни в одном каталоге за пределами ~/MyProj/myapp
. Это не помогло.
Я очень ценю любую помощь.
Кстати, я использую Python 3.6 и Django 2.1.7.