【问题标题】:Django with ModWsgi and Apache not a valid application带有 ModWsgi 和 Apache 的 Django 不是有效的应用程序
【发布时间】:2018-05-22 10:51:30
【问题描述】:

这最终成为 OSx MySQL 配置不当的原因:不安全使用相对路径问题,但我留下了原始问题,以防阅读器具有相同的面包屑痕迹。

所以这是一个奇怪的问题 - 我正在尝试在运行 OSx 的 Mac 上将 Django 部署到 Apache、ModWSGI,但遇到以下错误消息:

目标 WSGI 脚本 '/Library/WebServer/local_biems/biems/wsgi.py' 不包含 WSGI 应用程序

现在:

  • local_biems 使用 python manage.py runserver 运行正常,没有静音问题。所以我相信我的项目没有错误并且可以部署。
  • 一个测试应用程序 local_blog 在 runserver 和我的虚拟主机配置下运行正常 - 所以我假设 Apache 和 MODWSGI 一起玩得很开心。
  • local_biems 和 local_blog 在 /Library/WebServer/ 中彼此并排,并且具有相同的权限。
  • 如果我更新虚拟主机中的文件路径,重新启动 apache 并硬重新加载站点,我会收到上述错误。
  • WSGI 文件完全相同。

我可以尝试什么?我已经尝试过 get_wsgi_application() 周围的 try/catch 语句

try:
    application = get_wsgi_application()
    print 'WSGI without exception'
except Exception:
    print 'handling WSGI exception'
    # Error loading applications
    if 'mod_wsgi' in sys.modules:
        traceback.print_exc()
        os.kill(os.getpid(), signal.SIGINT)
        time.sleep(2.5)

但同样的问题。如果我删除它并坚持标准......

Fri Dec 08 08:23:15.188440 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348] Traceback (most recent call last):, referer: http://biems.local/
[Fri Dec 08 08:23:15.188471 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348]   File "/Library/WebServer/local_biems/biems/wsgi.py", line 16, in <module>, referer: http://biems.local/
[Fri Dec 08 08:23:15.188521 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348]     application = get_wsgi_application(), referer: http://biems.local/
[Fri Dec 08 08:23:15.188542 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348]   File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application, referer: http://biems.local/
[Fri Dec 08 08:23:15.188599 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348]     django.setup(set_prefix=False), referer: http://biems.local/
[Fri Dec 08 08:23:15.188615 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348]   File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/__init__.py", line 27, in setup, referer: http://biems.local/
[Fri Dec 08 08:23:15.188637 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348]     apps.populate(settings.INSTALLED_APPS), referer: http://biems.local/
[Fri Dec 08 08:23:15.188650 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348]   File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/apps/registry.py", line 78, in populate, referer: http://biems.local/
[Fri Dec 08 08:23:15.188682 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348]     raise RuntimeError("populate() isn't reentrant"), referer: http://biems.local/
[Fri Dec 08 08:23:15.188703 2017] [wsgi:error] [pid 16734] [client 127.0.0.1:55348] RuntimeError: populate() isn't reentrant, referer: http://biems.local/

虽然我刚刚注释掉了我的所有(除了 1 个)应用程序。奇怪的是,同一个站点正在开发一个删除 Ubuntu VPS 没问题!

好的,所以我刚刚将数据库设置从 local_biems 复制到 local_blog,我得到了 MYSQL 错误。

daviesc@orion:local_biems [0]$ tail -f /var/log/apache2/local_blog.error.log 
[Fri Dec 08 08:42:57.704722 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911]   File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/utils.py", line 115, in load_backend, referer: http://biems.local/polls/
[Fri Dec 08 08:42:57.704740 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911]     return import_module('%s.base' % backend_name), referer: http://biems.local/polls/
[Fri Dec 08 08:42:57.704750 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911]   File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module, referer: http://biems.local/polls/
[Fri Dec 08 08:42:57.704766 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911]     __import__(name), referer: http://biems.local/polls/
[Fri Dec 08 08:42:57.704776 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911]   File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 30, in <module>, referer: http://biems.local/polls/
[Fri Dec 08 08:42:57.704913 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911]     'Did you install mysqlclient or MySQL-python?' % e, referer: http://biems.local/polls/
[Fri Dec 08 08:42:57.704934 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911] ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib, referer: http://biems.local/polls/
[Fri Dec 08 08:42:57.704941 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911]   Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/_mysql.so, referer: http://biems.local/polls/
[Fri Dec 08 08:42:57.704946 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911]   Reason: unsafe use of relative rpath libmysqlclient.18.dylib in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/_mysql.so with restricted binary., referer: http://biems.local/polls/
[Fri Dec 08 08:42:57.704951 2017] [wsgi:error] [pid 16937] [client 127.0.0.1:55911] Did you install mysqlclient or MySQL-python?, referer: http://biems.local/polls/

【问题讨论】:

  • 删除所有尝试/除外。现在您在日志中看到了什么?
  • 就是这么做的……我会在上面编辑。
  • 重启后返回发现第一个错误,不是你引用的那个错误。该错误只是错误的后续,而不是根本原因。真正的问题将是第一个错误,而不是后续错误。
  • 我想我找到了错误。查看进一步更新。
  • 你也不应该使用那个 try/except。确保您使用的是 mod_wsgi 的守护程序模式并将startup-timeout=15 传递给WSGIDaemonProcess。这是从进程重启时可能出现的暂时错误中恢复的推荐方法。

标签: django macos apache mod-wsgi


【解决方案1】:

好的。我追踪到 -

MySQL Improperly Configured Reason: unsafe use of relative path

虽然需要更新最后一个参数以反映新路径。

sudo install_name_tool -change libmysqlclient.18.dylib /
/usr/local/mysql/lib/libmysqlclient.18.dylib /
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/_mysql.so

这可能是特定于 OSx 的问题 - 这是在 10.12.6 上。我不确定我是否会轻易找到它,因为 SQL 错误似乎只出现一次,然后编译的文件报告了一个不同的错误。我发现使用

find . -type f -name '*.pyc' -exec rm {} +

帮助删除所有已编译的文件。

还必须将 Debug 设置为 True 才能获得信息量较少的 500 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2012-08-31
    • 2012-10-14
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多