Mac OSX: LoadModule wsgi_module 没有像文档中提到的那样工作
Mac OSX: LoadModule wsgi_module not working as mentioned in docs
出于 Mac OSX 中的安全原因,我将 apache 从 2.4.25 升级到 2.4.29。
还通过 pip 安装了 mod_wsgi。
现在在重新启动 apache 服务器时遇到困难!
我运行这个命令按照mod_wsgidocs,
> mod_wsgi-express module-config
LoadModule wsgi_module "/Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so"
WSGIPythonHome "/System/Library/Frameworks/Python.framework/Versions/2.7"
将以上两行复制到 apache.conf
文件中并尝试启动 apache 服务器,但出现以下错误:
> sudo apachectl start
/usr/local/apache/bin/apachectl: line 79: 51863 Illegal instruction: 4 $HTTPD -k $ARGV
如有任何帮助,我们将不胜感激。谢谢!
编辑 根据格雷厄姆的回答:
# I upgraded the mod_wsgi
> sudo pip install --upgrade --no-cache-dir mod_wsgi
Collecting mod_wsgi
Downloading mod_wsgi-4.5.21.tar.gz (2.5MB)
100% |████████████████████████████████| 2.5MB 2.1MB/s
Installing collected packages: mod-wsgi
Found existing installation: mod-wsgi 4.5.20
Uninstalling mod-wsgi-4.5.20:
Successfully uninstalled mod-wsgi-4.5.20
Running setup.py install for mod-wsgi ... done
Successfully installed mod-wsgi-4.5.21
但是当我尝试时:
> mod_wsgi-express start-server
Traceback (most recent call last):
File "/Library/WebServer/Documents/DSFENV/bin/mod_wsgi-express", line 11, in <module>
load_entry_point('mod-wsgi==4.5.21', 'console_scripts', 'mod_wsgi-express')()
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/site-packages/mod_wsgi/server/__init__.py", line 3484, in main
cmd_start_server(args)
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/site-packages/mod_wsgi/server/__init__.py", line 3332, in cmd_start_server
config = _cmd_setup_server('start-server', args, vars(options))
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/site-packages/mod_wsgi/server/__init__.py", line 2999, in _cmd_setup_server
language, encoding = locale.getdefaultlocale()
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/locale.py", line 543, in getdefaultlocale
return _parse_localename(localename)
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/locale.py", line 475, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
出现上述错误。
我还安装了 apache 2.4.29 blog:
第二次编辑
我已经解决了 ValueError: unknown locale: UTF-8
,现在 mod_wsgi-express start-server
的输出显示:
> mod_wsgi-express start-server
Server URL : http://localhost:8000/
Server Root : /tmp/mod_wsgi-localhost:8000:501
Server Conf : /tmp/mod_wsgi-localhost:8000:501/httpd.conf
Error Log File : /tmp/mod_wsgi-localhost:8000:501/error_log (warn)
Request Capacity : 5 (1 process * 5 threads)
Request Timeout : 60 (seconds)
Startup Timeout : 15 (seconds)
Queue Backlog : 100 (connections)
Queue Timeout : 45 (seconds)
Server Capacity : 20 (event/worker), 20 (prefork)
Server Backlog : 500 (connections)
Locale Setting : en_US.UTF-8
但是当我尝试进行配置测试时,仍然显示相同的错误:
> sudo apachectl configtest
/usr/local/apache/bin/apachectl: line 79: 53944 Illegal instruction: 4 $HTTPD -t
xcode版本:
> xcodebuild -version
Xcode 8.3.2
Build version 8E2002
第三次编辑 根据评论:
> /usr/local/apache/bin/httpd
Illegal instruction: 4
> /Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so
-bash: /Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so: cannot execute binary file
> sys.prefix
'/System/Library/Frameworks/Python.framework/Versions/2.7'
> sys.version
'2.7.10 (default, Feb 7 2017, 00:08:15) \n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]'
我按照这个博客安装了 Apache 2.4.29:
http://mac-dev-env.patrickbougie.com/apache/
--with-ssl 选项,因为我们的网站需要 https。
第四次编辑:
> file /usr/local/apache/bin/httpd
/usr/local/apache/bin/httpd: Mach-O 64-bit executable x86_64
> file /Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so
/Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so: Mach-O universal binary with 2 architectures: [x86_64: Mach-O 64-bit bundle x86_64] [i386: Mach-O bundle i386]
/Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so (for architecture x86_64): Mach-O 64-bit bundle x86_64
/Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so (for architecture i386): Mach-O bundle i386
请让我知道如何进行。
如果您以某种方式更新了 Apache 安装,通常来自旧版本的 mod_wsgi.so 二进制文件应该仍然可以工作,因为 Apache 保持跨补丁级别更新的 ABI 兼容性。
如果它不起作用,那么您可能需要重新构建 mod_wsgi。如果 mod_wsgi 没有更新版本,您将需要强制完全重新构建以确保不使用来自 pip
缓存的缓存二进制文件。
pip install --upgrade --no-cache-dir mod_wsgi
下一个问题是,如果您已升级到 Xcode 9.1,Apple 通过完全删除 apxs
进一步破坏了一些东西,这意味着我之前针对 Apple 破坏的解决方法不再有效。在这种情况下,您需要确保安装的是 mod_wsgi 4.5.21 或更高版本。该版本刚刚发布,带有修复以适应 Xcode 9.1
所以请尝试上面的 pip
命令并确保 mod_wsgi-express
在 运行 之前仍然有效:
mod_wsgi-express start-server
然后 运行 再次验证要在 Apache 配置中使用的配置片段:
mod_wsgi-express module-config
如果主 Apache 仍然存在问题,请确保您完全停止 Apache 然后再启动,而不仅仅是重新启动。让我知道一切进展如何。
更新 1
以上假定您使用的是 Apple 提供的 Apache,以符合 Xcode 9.1 注释。您似乎在使用自己的 Apache,可能来自 Homebrew。仍然尝试同样的事情。
正如格雷厄姆所建议的:
pip install --upgrade --no-cache-dir mod_wsgi
升级到 mod_wsgi 4.5.22 成功了。
出于 Mac OSX 中的安全原因,我将 apache 从 2.4.25 升级到 2.4.29。 还通过 pip 安装了 mod_wsgi。
现在在重新启动 apache 服务器时遇到困难!
我运行这个命令按照mod_wsgidocs,
> mod_wsgi-express module-config
LoadModule wsgi_module "/Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so"
WSGIPythonHome "/System/Library/Frameworks/Python.framework/Versions/2.7"
将以上两行复制到 apache.conf
文件中并尝试启动 apache 服务器,但出现以下错误:
> sudo apachectl start
/usr/local/apache/bin/apachectl: line 79: 51863 Illegal instruction: 4 $HTTPD -k $ARGV
如有任何帮助,我们将不胜感激。谢谢!
编辑 根据格雷厄姆的回答:
# I upgraded the mod_wsgi
> sudo pip install --upgrade --no-cache-dir mod_wsgi
Collecting mod_wsgi
Downloading mod_wsgi-4.5.21.tar.gz (2.5MB)
100% |████████████████████████████████| 2.5MB 2.1MB/s
Installing collected packages: mod-wsgi
Found existing installation: mod-wsgi 4.5.20
Uninstalling mod-wsgi-4.5.20:
Successfully uninstalled mod-wsgi-4.5.20
Running setup.py install for mod-wsgi ... done
Successfully installed mod-wsgi-4.5.21
但是当我尝试时:
> mod_wsgi-express start-server
Traceback (most recent call last):
File "/Library/WebServer/Documents/DSFENV/bin/mod_wsgi-express", line 11, in <module>
load_entry_point('mod-wsgi==4.5.21', 'console_scripts', 'mod_wsgi-express')()
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/site-packages/mod_wsgi/server/__init__.py", line 3484, in main
cmd_start_server(args)
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/site-packages/mod_wsgi/server/__init__.py", line 3332, in cmd_start_server
config = _cmd_setup_server('start-server', args, vars(options))
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/site-packages/mod_wsgi/server/__init__.py", line 2999, in _cmd_setup_server
language, encoding = locale.getdefaultlocale()
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/locale.py", line 543, in getdefaultlocale
return _parse_localename(localename)
File "/Library/WebServer/Documents/DSFENV/lib/python2.7/locale.py", line 475, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
出现上述错误。 我还安装了 apache 2.4.29 blog:
第二次编辑
我已经解决了 ValueError: unknown locale: UTF-8
,现在 mod_wsgi-express start-server
的输出显示:
> mod_wsgi-express start-server
Server URL : http://localhost:8000/
Server Root : /tmp/mod_wsgi-localhost:8000:501
Server Conf : /tmp/mod_wsgi-localhost:8000:501/httpd.conf
Error Log File : /tmp/mod_wsgi-localhost:8000:501/error_log (warn)
Request Capacity : 5 (1 process * 5 threads)
Request Timeout : 60 (seconds)
Startup Timeout : 15 (seconds)
Queue Backlog : 100 (connections)
Queue Timeout : 45 (seconds)
Server Capacity : 20 (event/worker), 20 (prefork)
Server Backlog : 500 (connections)
Locale Setting : en_US.UTF-8
但是当我尝试进行配置测试时,仍然显示相同的错误:
> sudo apachectl configtest
/usr/local/apache/bin/apachectl: line 79: 53944 Illegal instruction: 4 $HTTPD -t
xcode版本:
> xcodebuild -version
Xcode 8.3.2
Build version 8E2002
第三次编辑 根据评论:
> /usr/local/apache/bin/httpd
Illegal instruction: 4
> /Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so
-bash: /Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so: cannot execute binary file
> sys.prefix
'/System/Library/Frameworks/Python.framework/Versions/2.7'
> sys.version
'2.7.10 (default, Feb 7 2017, 00:08:15) \n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]'
我按照这个博客安装了 Apache 2.4.29:
http://mac-dev-env.patrickbougie.com/apache/
--with-ssl 选项,因为我们的网站需要 https。
第四次编辑:
> file /usr/local/apache/bin/httpd
/usr/local/apache/bin/httpd: Mach-O 64-bit executable x86_64
> file /Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so
/Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so: Mach-O universal binary with 2 architectures: [x86_64: Mach-O 64-bit bundle x86_64] [i386: Mach-O bundle i386]
/Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so (for architecture x86_64): Mach-O 64-bit bundle x86_64
/Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so (for architecture i386): Mach-O bundle i386
请让我知道如何进行。
如果您以某种方式更新了 Apache 安装,通常来自旧版本的 mod_wsgi.so 二进制文件应该仍然可以工作,因为 Apache 保持跨补丁级别更新的 ABI 兼容性。
如果它不起作用,那么您可能需要重新构建 mod_wsgi。如果 mod_wsgi 没有更新版本,您将需要强制完全重新构建以确保不使用来自 pip
缓存的缓存二进制文件。
pip install --upgrade --no-cache-dir mod_wsgi
下一个问题是,如果您已升级到 Xcode 9.1,Apple 通过完全删除 apxs
进一步破坏了一些东西,这意味着我之前针对 Apple 破坏的解决方法不再有效。在这种情况下,您需要确保安装的是 mod_wsgi 4.5.21 或更高版本。该版本刚刚发布,带有修复以适应 Xcode 9.1
所以请尝试上面的 pip
命令并确保 mod_wsgi-express
在 运行 之前仍然有效:
mod_wsgi-express start-server
然后 运行 再次验证要在 Apache 配置中使用的配置片段:
mod_wsgi-express module-config
如果主 Apache 仍然存在问题,请确保您完全停止 Apache 然后再启动,而不仅仅是重新启动。让我知道一切进展如何。
更新 1
以上假定您使用的是 Apple 提供的 Apache,以符合 Xcode 9.1 注释。您似乎在使用自己的 Apache,可能来自 Homebrew。仍然尝试同样的事情。
正如格雷厄姆所建议的:
pip install --upgrade --no-cache-dir mod_wsgi
升级到 mod_wsgi 4.5.22 成功了。