Apache-2.2

Centos+Apache+Phusion+REE=失敗

  • May 27, 2020

在過去的幾天裡,我一直試圖讓 Phusion Passenger 在 5.6 上執行,但沒有成功。最初,我從 RVM 下的 Ruby 1.9.2 開始,因為基於 RHEL 的發行版上的預設 Ruby 相當陳舊。我把所有東西都安裝好了,但遇到了一些問題。認為它是 RVM,我將它與預設的 Ruby 一起完全刪除並安裝了 Ruby Enterprise Ed。1.8.7.2011-03 進入/usr. 我仍然有同樣的問題。

當我嘗試使用安裝程序提供的預設設置說明進行Passenger 時,我收到一條錯誤消息,提示cannot find phusion_passenger/analytics_logger。我從Google上找到的資訊很少,但據我推測這是一個權限錯誤。

最初,我嘗試設置一個 ACL,允許 apache 使用者訪問乘客根目錄。失敗了,我嘗試將乘客根目錄更改為 777。接下來,我嘗試httpd_sys_content_t根據使用者指南的第 6.3.5 節將乘客根目錄及其父目錄的上下文更改為。最後,我嘗試將 SELinux 設置為 permissive。沒有任何效果。

通讀使用者指南後,我嘗試了以下設置,結果為 500 ISE:

PassengerUserSwitching off
PassengerUser apache
PassengerGroup apache

這是我的passenger.conf文件減去上述內容(來自/etc/httpd/conf.d):

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7
PassengerRuby /usr/bin/ruby
....
PassengerLogLevel 3

這是 500 錯誤的日誌輸出:

[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/Pool.h:939 time=2011-04-30 13:12:17.351 ]: Spawning a process for /var/www/html because there are none for this app group
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/../SpawnManager.h:291 time=2011-04-30 13:12:17.352 ]: Spawning a new application process for /var/www/html...
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/../SpawnManager.h:427 time=2011-04-30 13:12:17.352 ]: Spawn server died. Attempting to restart it...
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/../SpawnManager.h:430 time=2011-04-30 13:12:17.357 ]: Restart seems to be successful.
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/../SpawnManager.h:291 time=2011-04-30 13:12:17.359 ]: Spawning a new application process for /var/www/html...
/usr/bin/ruby: error while loading shared libraries: libtcmalloc_minimal.so.0: cannot open shared object file: No such file or directory
[ pid=17939 thr=1094539584 file=ext/common/ApplicationPool/Server.h:297 time=2011-04-30 13:12:17.365 ]: Client 9: SpawnException occured (no error page)
[ pid=17951 thr=47853881642864 file=ext/apache2/Hooks.cpp:865 time=2011-04-30 13:12:17.366 ]: Unexpected error in mod_passenger: Cannot spawn application '/var/www/html': Could not read from the spawn server: Connection reset by peer (104)
 Backtrace:
    in 'virtual Passenger::SessionPtr Passenger::ApplicationPool::Client::get(const Passenger::PoolOptions&)' (Client.h:750)
    in 'Passenger::SessionPtr Hooks::getSession(const Passenger::PoolOptions&)' (Hooks.cpp:297)
    in 'int Hooks::handleRequest(request_rec*)' (Hooks.cpp:566)

首先,當您說您刪除了預設的 Ruby 時,我希望您不是指 CentOS 附帶的那個。根據我的經驗,最好不要管那個,讓 yum 管理它。我將我的 Ruby/REE 版本安裝到 /opt/ruby 中,但它們可以放在 /usr/local 或您想要的任何位置。

至於配置 SELinux,我個人禁用它,但 permissive 應該沒有什麼不同。從基本安裝開始,我只需添加編譯包所需的典型包,然後進行全面升級:

# yum -y install gcc make gcc-c++ cpp automake patch zlib-devel && yum -y upgrade

然後我安裝 REE 1.8.7-2011.03:

# ./installer --dont-install-useful-gems --no-dev-docs --auto /opt/ruby/enterprise-1.8.7-2011.03

確保已安裝 Apache (httpd),然後安裝乘客 gem,以及相應的 Apache 模組:

# /opt/ruby/enterprise-1.8.7-2011.03/bin/gem install --no-rdoc --no-ri --version '= 3.0.7' passenger
# /opt/ruby/enterprise-1.8.7-2011.03/bin/passenger-install-apache2-module -a

將它告訴​​您的內容添加到 Apache 的 httpd.conf 中。我使用以下內容:

SetEnv MY_RUBY_HOME "/opt/ruby/enterprise-1.8.7-2011.03"
SetEnv GEM_HOME "/opt/ruby/enterprise-1.8.7-2011.03/lib/ruby/gems/1.8"
SetEnv GEM_PATH "/opt/ruby/enterprise-1.8.7-2011.03/lib/ruby/gems/1.8"
LoadModule passenger_module /opt/ruby/enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /opt/ruby/enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.7
PassengerRuby /opt/ruby/enterprise-1.8.7-2011.03/bin/ruby

然後,我將一個簡單的 Rails 應用程序部署到 /home/httpd/app,並添加一個類似於以下內容的 VirtualHost:

<VirtualHost *:80>
 ServerName example.domain.com
 DocumentRoot /home/httpd/app/public
 RackBaseURI /
 RailsEnv production
 PassengerSpawnMethod smart
</VirtualHost>

確保安裝了您的應用程序需要的所有 gem,包括“rails”。

在整個設置過程中,您不必對文件權限進行任何特別的操作,除了您必須記住您的應用程序將以 Rails 應用程序根所有者的使用者/組身份執行。該使用者必須對所有 /opt/ruby 內容至少具有 rx 權限。

老實說,我不知道您為什麼會收到/usr/bin/ruby: error while loading shared libraries: libtcmalloc_minimal.so.0: cannot open shared object file: No such file or directory錯誤消息,但是如果您按照上述說明進行操作,並確保不要打擾您的系統 Ruby,那麼您應該不會有任何問題。

很抱歉,我沒有真正回答您的問題,但我希望我經過驗證且值得信賴的流程對您和我自己同樣有效!

引用自:https://serverfault.com/questions/265058