【问题标题】:ImportError for Django modules (nested-admin and nested-inline) when SSL is enabled启用 SSL 时 Django 模块(nested-admin 和 nested-inline)的 ImportError
【发布时间】:2015-11-23 10:49:33
【问题描述】:

我在启用 SSL 的生产环境中遇到以下错误。

ssl_error_log:

[Wed Nov 18 11:14:16.303520 2015] [:error] [pid 14069] [remote 128.132.66.000:116] mod_wsgi (pid=14069): Target WSGI script '/apps/staging/wisdmepid/django_version/django_version/wsgi.py' cannot be loaded as Python module.[Wed Nov 18 11:14:16.303584 2015] [:error] [pid 14069] [remote 128.132.66.000:116] mod_wsgi (pid=14069): Exception occurred processing WSGI script '/apps/staging/wisdmepid/django_version/django_version/wsgi.py'.
[Wed Nov 18 11:14:16.303617 2015] [:error] [pid 14069] [remote 128.132.66.000:116] Traceback (most recent call last):
[Wed Nov 18 11:14:16.303641 2015] [:error] [pid 14069] [remote 128.132.66.000:116]   File "/apps/staging/wisdmepid/django_version/django_version/wsgi.py", line 18, in <module>
[Wed Nov 18 11:14:16.303732 2015] [:error] [pid 14069] [remote 128.132.66.000:116]     application = get_wsgi_application()[Wed Nov 18 11:14:16.303747 2015] [:error] [pid 14069] [remote 128.132.66.000:116]   File "/apps/staging/wisdmepid/django_version/env/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Wed Nov 18 11:14:16.303805 2015] [:error] [pid 14069] [remote 128.132.66.000:116]     django.setup()
[Wed Nov 18 11:14:16.303816 2015] [:error] [pid 14069] [remote 128.132.66.000:116]   File "/apps/staging/wisdmepid/django_version/env/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
[Wed Nov 18 11:14:16.303861 2015] [:error] [pid 14069] [remote 128.132.66.000:116]     apps.populate(settings.INSTALLED_APPS)
[Wed Nov 18 11:14:16.303870 2015] [:error] [pid 14069] [remote 128.132.66.000:116]   File "/apps/staging/wisdmepid/django_version/env/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
[Wed Nov 18 11:14:16.304015 2015] [:error] [pid 14069] [remote 128.132.66.000:116]     app_config = AppConfig.create(entry)
[Wed Nov 18 11:14:16.304031 2015] [:error] [pid 14069] [remote 128.132.66.000:116]   File "/apps/staging/wisdmepid/django_version/env/lib/python2.7/site-packages/django/apps/config.py", line 86, in create[Wed Nov 18 11:14:16.304125 2015] [:error] [pid 14069] [remote 128.132.66.000:116]     module = import_module(entry)
[Wed Nov 18 11:14:16.304136 2015] [:error] [pid 14069] [remote 128.132.66.000:116]   File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
[Wed Nov 18 11:14:16.304199 2015] [:error] [pid 14069] [remote 128.132.66.000:116]     __import__(name)
[Wed Nov 18 11:14:16.304225 2015] [:error] [pid 14069] [remote 128.132.66.000:116] ImportError: No module named nested_admin[Wed Nov 18 11:14:29.322753 2015] [:error] [pid 14068] [remote 128.132.66.000:104] mod_wsgi (pid=14068): Target WSGI script '/apps/staging/wisdmepid/django_version/django_version/wsgi.py' cannot be loaded as Python module.[Wed Nov 18 11:14:29.322819 2015] [:error] [pid 14068] [remote 128.132.66.000:104] mod_wsgi (pid=14068): Exception occurred processing WSGI script '/apps/staging/wisdmepid/django_version/django_version/wsgi.py'.[Wed Nov 18 11:14:29.322851 2015] [:error] [pid 14068] [remote 128.132.66.000:104] Traceback (most recent call last):
[Wed Nov 18 11:14:29.322873 2015] [:error] [pid 14068] [remote 128.132.66.000:104]   File "/apps/staging/wisdmepid/django_version/django_version/wsgi.py", line 18, in <module>
[Wed Nov 18 11:14:29.322955 2015] [:error] [pid 14068] [remote 128.132.66.000:104]     application = get_wsgi_application()[Wed Nov 18 11:14:29.322970 2015] [:error] [pid 14068] [remote 128.132.66.000:104]   File "/apps/staging/wisdmepid/django_version/env/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Wed Nov 18 11:14:29.323024 2015] [:error] [pid 14068] [remote 128.132.66.000:104]     django.setup()
[Wed Nov 18 11:14:29.323034 2015] [:error] [pid 14068] [remote 128.132.66.000:104]   File "/apps/staging/wisdmepid/django_version/env/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
[Wed Nov 18 11:14:29.323096 2015] [:error] [pid 14068] [remote 128.132.66.000:104]     apps.populate(settings.INSTALLED_APPS)[Wed Nov 18 11:14:29.323107 2015] [:error] [pid 14068] [remote 128.132.66.000:104]   File "/apps/staging/wisdmepid/django_version/env/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
[Wed Nov 18 11:14:29.323251 2015] [:error] [pid 14068] [remote 128.132.66.000:104]     app_config = AppConfig.create(entry)
[Wed Nov 18 11:14:29.323266 2015] [:error] [pid 14068] [remote 128.132.66.000:104]   File "/apps/staging/wisdmepid/django_version/env/lib/python2.7/site-packages/django/apps/config.py", line 86, in create
[Wed Nov 18 11:14:29.323374 2015] [:error] [pid 14068] [remote 128.132.66.000:104]     module = import_module(entry)[Wed Nov 18 11:14:29.323393 2015] [:error] [pid 14068] [remote 128.132.66.000:104]   File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
[Wed Nov 18 11:14:29.323448 2015] [:error] [pid 14068] [remote 128.132.66.000:104]     __import__(name)
[Wed Nov 18 11:14:29.323471 2015] [:error] [pid 14068] [remote 128.132.66.000:104] ImportError: No module named nested_admin

我已经安装了模块django-nested-admin。当我使用 django-nested-inline 而不是 django-nested-admin 时,我也会遇到同样的错误。知道有什么问题吗?

在我得到的网站上:

内部服务器错误

服务器遇到内部错误或配置错误,并且 无法完成您的请求。

请通过root@localhost联系服务器管理员告知 他们发生此错误的时间以及您执行的操作 就在这个错误之前。

有关此错误的更多信息可能在服务器错误中可用 记录。

该代码在我们的非 SSL 网站中完美运行。
我已经尝试过thisthis 中提到的解决方案。没用。任何指针都会非常有帮助。谢谢。

这是我们的 apache 配置文件。这不是实际的,但原来的配置是符合这个的。

<VirtualHost *:80>
    ServerName bogus.example.com:80
    ErrorLog logs/error_log
    TransferLog logs/access_log
    LogLevel warn

    RewriteEngine On
    RewriteRule ^/?sslsite/(.*) https://%{SERVER_NAME}/sslsite/$1 [R,L]


        alias /static/notsslsite /apps/deployment/notsslsite/django_version/static
    <Directory /apps/deployment/notsslsite/django_version/static>
        Require all granted
    </Directory>

    <Directory /apps/deployment/notsslsite/django_version/django_version>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIDaemonProcess notsslsite processes=2 python-path=/apps/deployment/notsslsite/django_version:/apps/deployment/notsslsite/django_version/env/lib/python2.7/site-packages
        WSGIProcessGroup notsslsite
        WSGIScriptAlias /notsslsite /apps/deployment/notsslsite/django_version/django_version/wsgi.py process-group=notsslsite

</VirtualHost>

<VirtualHost *:443>
    ServerName bogus.example.com:443
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/httpd/ssl/bogus.example.com.crt
    SSLCertificateKeyFile /etc/httpd/ssl/bogus.example.com.key
    SSLCertificateChainFile /etc/httpd/ssl/bogus_chain.pem


    SetEnvIf User-Agent ".*MSIE.*" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
    CustomLog logs/ssl_request_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

        alias /static/sslsite /apps/staging/sslsite/django_version/static
    <Directory /apps/staging/sslsite/django_version/static>
        Require all granted
    </Directory>

    <Directory /apps/staging/sslsite/django_version/django_version>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIDaemonProcess sslsite processes=2 python-path=/apps/staging/sslsite/django_version:/apps/staging/sslsite/django_version/env/lib/python2.7/site-packages
        WSGIProcessGroup sslsite
        WSGIScriptAlias /sslsite /apps/staging/sslsite/django_version/django_version/wsgi.py process-group=sslsite

</VirtualHost>

【问题讨论】:

  • 您检查过读取权限吗?请记住,您的进程可能在不同的用户下运行,并且可能使用受限的环境。
  • 如何启用 SSL?您的 django 项目是在某个 HTTP 服务器(nginx、apache)后面还是直接提供服务? (uWSGI,gunicorn)。您的 ssl 和非 ssl 服务器是如何配置的?
  • @brunodesthuilliers 它具有与正常工作的非 SSL 相同的读取权限。
  • 愚蠢的问题,但你确定它已经安装了吗? (点冻结)
  • @GwynBleidD 我们有一个 ssl 证书。它在阿帕奇后面。我不明白你的意思是它是如何配置的。但是,我在问题中添加了我们的快速配置。谢谢。

标签: python django ssl django-admin


【解决方案1】:

这是您在非 SSL 配置中的 WSGIDaemonProcess 设置

WSGIDaemonProcess notsslsite processes=2 python-path=/apps/deployment/notsslsite/django_version:/apps/deployment/notsslsite/django_version/env/lib/python2.7/site-packages

这里是来自 ssl 配置

WSGIDaemonProcess sslsite processes=2 python-path=/apps/staging/sslsite/django_version:/apps/staging/sslsite/django_version/env/lib/python2.7/site-packages

您对 ssl 和非 ssl 实例使用不同的 python 路径,并且可能nested_admin 未安装在第二个实例中。这是 django 在您的 apache 设置中唯一重要的区别。尝试在 ssl 站点上设置与非 ssl 相同的环境,并检查它是否可以工作。如果可以,请从 ssl config 在环境中安装适当的软件包。如果它不起作用,可能您的虚拟环境已损坏,请尝试重新创建它。

【讨论】:

  • 感谢您的回答。但问题是代码中的其他问题,我花了 10 天时间才弄清楚。
猜你喜欢
  • 1970-01-01
  • 2022-06-25
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2017-01-09
  • 2022-12-27
相关资源
最近更新 更多