【发布时间】: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