尝试在Apache上运行乘客时出现的问题

时间:2018-09-25 18:56:24

标签: apache passenger

运行时出现此问题

httpd -t

httpd: Syntax error on line 545 of /private/etc/apache2/httpd.conf: Syntax error on line 1 of /private/etc/apache2/other/passenger.conf: Cannot load /Users/sbaidon/.rvm/gems/ruby-2.2.5/gems/passenger-5.3.5/b uildout/apache2/mod_passenger.so into server: dlopen(/Users/sbaidon/.rvm/gems/ruby-2.2.5/gems/passenger-5.3.5/buildout/apache2/mod_passenger.so, 10): no suitable image found. Did find:\n\t/Users/sbaidon/.rv m/gems/ruby-2.2.5/gems/passenger-5.3.5/buildout/apache2/mod_passenger.so: code signature in (/Users/sbaidon/.rvm/gems/ruby-2.2.5/gems/passenger-5.3.5/buildout/apache2/mod_passenger.so) not valid for use in p rocess using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.\n\t/Users/sbaidon/.rvm/gems/ruby-2.2.5/gems/passenger-5.3.5/buildout/apache2/mod_passen ger.so: stat() failed with errno=22

安装乘客就可以了。

3 个答案:

答案 0 :(得分:5)

我也遇到了这个问题:问题是macOS Mojave随附的内置httpd启用了库验证,这意味着必须正确签名加载的任何模块。不幸的是,mod_passenger.so未签名,因此加载失败。实际上,很多人在macOS Mojave上加载Apache模块时遇到了这个问题(尤其是在beta期间),一些示例参考:

https://github.com/GrahamDumpleton/mod_wsgi/issues/357 https://github.com/phpredis/phpredis/issues/1406

我相信可以在某个地方设置plist来赋予httpd权利,以禁用库验证(com.apple.security.cs.disable-library-validation),如https://developer.apple.com/documentation/security/com_apple_security_cs_disable-library-validation中所述。例如,这是最近的WebKit补丁,他们在其中添加了补丁以允许插件加载:https://bugs.webkit.org/show_bug.cgi?id=183252。同样,以下Mozilla员工在讨论他们如何启用此(和其他)属性:https://bugzilla.mozilla.org/show_bug.cgi?format=default&id=1470597

不幸的是,我不进行macOS开发(我只是在上进行开发 macOS),而且我完全不知道如何将其应用于内置的Apache,对不起。 / p>

在这一点上,我有点讨厌每个主要的macOS更新都会破坏我的所有httpd设置,并且通常很痛苦(虽然很少见,但仍然很烦人),所以我正在做我几年前应该做的事情:停止使用OS / X随附的内置httpd,而仅使用Homebrew httpd。

以下是我发现的有关设置Homebrew httpd(并禁用内置的macOS httpd)的一些说明,它非常简单明了,您不必遵循有关多个PHP版本的所有说明 等等:https://getgrav.org/blog/macos-mojave-apache-multiple-php-versions

如果有人可以弄清楚如何在内置的httpd中禁用库验证,或者是否有某种方法可以在mod_passenger.so上提供签名(似乎不太可能,因为Homebrew和gem passenger都需要从源代码构建) ,则无需破坏内置的httpd。但是我个人认为最好的解决方案是完全摆脱它,而使用Homebrew版本。

答案 1 :(得分:1)

对于任何有此问题或在macOS Mojave中库验证有任何问题的人,我发现了禁用它的简便方法。 https://github.com/mologie/macos-disable-library-validation

答案 2 :(得分:0)

此问题已在macOS 10.14.4中修复