Oauth 2.0 Python在弹性Beanstalk上加载oauth2_提供程序

Oauth 2.0 Python在弹性Beanstalk上加载oauth2_提供程序,oauth-2.0,Oauth 2.0,我试图在我的Python/Django web服务器上部署oauth2和oauth2提供程序,该服务器使用AmazonWeb服务(EC2和ElasticBeanstalk)部署在Ubuntu上 当我在本地运行web服务器时,一切正常。 当我对所有文件进行tar并将它们传输到EC2实例时,我成功地加载了 以下是my settings.py文件中已安装的应用程序: INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.a

我试图在我的Python/Django web服务器上部署oauth2和oauth2提供程序,该服务器使用AmazonWeb服务(EC2和ElasticBeanstalk)部署在Ubuntu上

当我在本地运行web服务器时,一切正常。 当我对所有文件进行tar并将它们传输到EC2实例时,我成功地加载了

以下是my settings.py文件中已安装的应用程序:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'oauth2_provider',
    'corsheaders',
    'consentrecords',
    'custom_user',
    'monitor',
)
以下是我用来安装oauth2所需的各种工具的命令(在确保正确设置virtualenv之后):

当我在EC2实例上指定python3 manage.py runserver时,它会正确启动本地web服务器,这对我来说意味着settings.py文件已正确读取

但是,当我将实例部署到Elastic Beanstalk(使用命令eb deploy)时,web服务器有一个内部错误。以下来自日志:

mod_wsgi (pid=6880): Exception occurred processing WSGI script '/opt/python/current/app/prod/consentrecords/consentrecords/wsgi.py'.
Traceback (most recent call last):
  File "/opt/python/current/app/prod/consentrecords/consentrecords/wsgi.py", line 21, in <module>
    application = get_wsgi_application()
  File "/opt/python/run/venv/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
    django.setup()
  File "/opt/python/run/venv/lib/python3.4/site-packages/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/opt/python/run/venv/lib/python3.4/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/opt/python/run/venv/lib/python3.4/site-packages/django/apps/config.py", line 86, in create
    module = import_module(entry)
  File "/opt/python/run/baselinenv/lib64/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
  ImportError: No module named 'oauth2_provider'
mod_wsgi(pid=6880):处理wsgi脚本“/opt/python/current/app/prod/approveredges/approveredges/wsgi.py”时发生异常。
回溯(最近一次呼叫最后一次):
文件“/opt/python/current/app/prod/approverRecords/approverRecords/wsgi.py”,第21行,在
application=get\u wsgi\u application()
文件“/opt/python/run/venv/lib/python3.4/site-packages/django/core/wsgi.py”,第14行,在get\u-wsgi\u应用程序中
django.setup()
文件“/opt/python/run/venv/lib/python3.4/site packages/django/__init___.py”,第18行,在安装程序中
应用程序。填充(设置。已安装的应用程序)
文件“/opt/python/run/venv/lib/python3.4/site packages/django/apps/registry.py”,第85行,填充
app_config=AppConfig.create(条目)
文件“/opt/python/run/venv/lib/python3.4/site packages/django/apps/config.py”,第86行,在create中
模块=导入模块(条目)
文件“/opt/python/run/baselinenv/lib64/python3.4/importlib/_init__.py”,第109行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第2254行,在_gcd_import中
文件“”,第2237行,在“查找”和“加载”中
文件“”,第2224行,在“查找”和“加载”中解锁
ImportError:没有名为“oauth2_provider”的模块
我还尝试在EC2实例上运行python3,并给出命令“importoauth2\u provider”。该命令没有产生错误,似乎加载了模块


为什么这可以在我的本地系统上工作,并且似乎可以在EC2实例上正确加载,而不是在Elastic Beanstalk实例上加载?

我发现这是我第一次需要合并站点包

我通过编辑.ebextensions/01-django_eb.config文件中的PYTHONPATH以包括包含oauth2提供程序的site packages目录,解决了这个问题

以下是.config文件:

option_settings:   "aws:elasticbeanstalk:application:environment":
    DJANGO_SETTINGS_MODULE: "consentrecords.settings"
    PYTHONPATH: "/opt/python/current/app/prod/consentrecords:/opt/python/current/app/prod/consentrecords/consentrecords:<b>/opt/python/current/app/prod/lib/python3.4/site-packages:$PYTHONPATH" "aws:elasticbeanstalk:container:python":
    WSGIPath: "prod/consentrecords/consentrecords/wsgi.py"   "aws:elasticbeanstalk:container:python:staticfiles":
    "/static/": "prod/consentrecords/static/"
选项设置:“aws:elasticbeanstalk:application:environment”:
DJANGO\u设置\u模块:“同意记录。设置”
PYTHONPATH:“/opt/python/current/app/prod/approverRecords:/opt/python/current/app/prod/approverRecords/approverRecords:/opt/python/current/app/prod/lib/python3.4/站点包:$PYTHONPATH”“aws:elasticbeanstalk:container:python”:
WSGIPath:“prod/approverRecords/approverRecords/wsgi.py”“aws:elasticbeanstalk:container:python:staticfiles”:
“/static/”:“产品/许可记录/static/”

我发现这是我第一次需要合并站点包

我通过编辑.ebextensions/01-django_eb.config文件中的PYTHONPATH以包括包含oauth2提供程序的site packages目录,解决了这个问题

以下是.config文件:

option_settings:   "aws:elasticbeanstalk:application:environment":
    DJANGO_SETTINGS_MODULE: "consentrecords.settings"
    PYTHONPATH: "/opt/python/current/app/prod/consentrecords:/opt/python/current/app/prod/consentrecords/consentrecords:<b>/opt/python/current/app/prod/lib/python3.4/site-packages:$PYTHONPATH" "aws:elasticbeanstalk:container:python":
    WSGIPath: "prod/consentrecords/consentrecords/wsgi.py"   "aws:elasticbeanstalk:container:python:staticfiles":
    "/static/": "prod/consentrecords/static/"
选项设置:“aws:elasticbeanstalk:application:environment”:
DJANGO\u设置\u模块:“同意记录。设置”
PYTHONPATH:“/opt/python/current/app/prod/approverRecords:/opt/python/current/app/prod/approverRecords/approverRecords:/opt/python/current/app/prod/lib/python3.4/站点包:$PYTHONPATH”“aws:elasticbeanstalk:container:python”:
WSGIPath:“prod/approverRecords/approverRecords/wsgi.py”“aws:elasticbeanstalk:container:python:staticfiles”:
“/static/”:“产品/许可记录/static/”

Michael我也遇到了同样的问题,我对Django完全不熟悉。请您再解释一下,这只适用于弹性beanstalk部署。Elastic Beanstalk允许在为EB系统设置环境变量的部署过程中读取配置文件。因此,我的修复方法是正确设置PYTHONPATH环境变量,以包括到oauth2模块的路径。Michael,我也有同样的问题,我对Django完全陌生,请您再解释一下好吗?这只适用于弹性beanstalk部署。Elastic Beanstalk允许在为EB系统设置环境变量的部署期间读取配置文件。因此,我的修复方法是正确设置PYTHONPATH环境变量,以包括oauth2模块的路径。