在Amazon Elastic Beanstalk上部署的Django应用程序中的“权限被拒绝”错误

时间:2019-04-05 00:24:30

标签: python django amazon-web-services amazon-elastic-beanstalk

我已经使用eb CLI将Django项目(MyProj)部署到了Amazon beantalk。该项目实际位于~/MyProj。它有一个名为myapp的应用程序,需要执行外部python脚本。为此,我在my_launcher.py目录中有~/MyProj/myappmy_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脚本的位置。我已经通过Elastic Beanstalk部分下的AWS管理控制台定义了此环境变量以及其他一些变量。在我的示例中,我有:

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] Permission denied: '/var/www/media/animals/user_uploads')后,我认为问题是可执行python脚本所在位置(即/home/ec2-user/company/app/python/)的Linux权限。为了检验该假设(即使我知道这对生产不利),我在sudo chmod -R 777 company目录中运行了命令/home/ec2-user。我重新部署了该项目,甚至一起重新启动了EC2实例。这没有帮助。

  2. 我将company目录移到~/MyProj/myapp内(并更新了服务器上的环境变量LOCATION),以为wsgi用户没有执行权限在~/MyProj/myapp以外的任何目录中。这没有帮助。

非常感谢您的帮助。

顺便说一句,我正在使用python 3.6和Django 2.1.7。

0 个答案:

没有答案