Centos+Apache+Phusion+REE=失敗
在過去的幾天裡,我一直試圖讓 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,那麼您應該不會有任何問題。很抱歉,我沒有真正回答您的問題,但我希望我經過驗證且值得信賴的流程對您和我自己同樣有效!