我已经使用eb CLI将Django项目(MyProj
)部署到了Amazon beantalk。该项目实际位于~/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脚本的位置。我已经通过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'
到目前为止我所做的一切都无济于事:
阅读许多在线页面(例如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实例。这没有帮助。
我将company
目录移到~/MyProj/myapp
内(并更新了服务器上的环境变量LOCATION
),以为wsgi
用户没有执行权限在~/MyProj/myapp
以外的任何目录中。这没有帮助。
非常感谢您的帮助。
顺便说一句,我正在使用python 3.6和Django 2.1.7。