簡體   English   中英

如何使用Apache / Passenger和多個Ruby版本運行Rails應用

[英]How to run Rails app using Apache/Passenger with Multiple Ruby versions

我正在嘗試設置Apache / Passenger配置以允許多個Ruby版本。 我在這里看到了多個紅寶石上的帖子( http://blog.phusion.nl/2013/08/19/phusion-passenger-4-0-14-released/ ),但顯然已經過時了,因為Passenger現在支持“ PassengerRuby”虛擬主機中的配置。 但是,我仍然遇到麻煩。 我究竟做錯了什么?

我有一個配置為的Passenger(4.0.14)安裝

PassengerDefaultRuby /usr/local/rvm/rubies/ree-1.8.7-2012.02/bin/ruby

該服務器具有一個虛擬主機,最近已對其進行了升級,以包括僅在最新版本的Rails中可用的某些功能。因此,我正在嘗試僅針對該應用程序運行Ruby 1.9.3和Rails 3.0。

編輯:該應用程序需要1.9.3的某些特定功能。 但是,當我僅將PassengerDefaultRuby作為1.8.7運行時,它就可以正常工作(這些功能除外)。 只有當我添加1.9.3時,我才會遇到問題。

編輯:如果我將1.9.3指定為默認Ruby,並且未為該應用程序指定PassengerRuby,則該應用程序將無法運行。 所以我想我的1.9.3安裝有問題。

所以..我加

PassengerRuby /usr/local/rvm/rubies/ruby-1.9.3-p448/bin/ruby

當我這樣做時,我在apache2 error.log中獲得以下堆棧跟蹤

[ 2013-09-06 07:48:32.2794 32582/7f4d0715c700 Pool2/Spawner.h:738 ]: [App 32622 stdout] 
[ 2013-09-06 07:48:35.6479 32582/7f4d0711b700 Pool2/Implementation.cpp:1172 ]: [App 32622 stderr] [     2013-09-06 07:48:35.6477 32622/0x00000002c633e0(Worker 1) utils.rb:71 ]: *** Exception TypeError in Passenger RequestHandler's client socket (wrong argument type Array (expected Struct)) (process 32622, thread 0x00000002c633e0(Worker 1)):
[ 2013-09-06 07:48:35.6479 32582/7f4d0711b700 Pool2/Implementation.cpp:1172 ]: [App 32622 stderr]   from /usr/lib/ruby/gems/1.8/gems/passenger-4.0.14/lib/phusion_passenger/ruby_core_enhancements.rb:81:in `writev2'
[ 2013-09-06 07:48:35.6479 32582/7f4d0711b700 Pool2/Implementation.cpp:1172 ]: [App 32622 stderr]   from /usr/lib/ruby/gems/1.8/gems/passenger-4.0.14/lib/phusion_passenger/ruby_core_enhancements.rb:81:in `writev2'
[ 2013-09-06 07:48:35.6479 32582/7f4d0711b700 Pool2/Implementation.cpp:1172 ]: [App 32622 stderr]   from /usr/lib/ruby/gems/1.8/gems/passenger-4.0.14/lib/phusion_passenger/utils/unseekable_socket.rb:126:in `writev2'
[ 2013-09-06 07:48:35.6479 32582/7f4d0711b700 Pool2/Implementation.cpp:1172 ]: [App 32622 stderr]   from /usr/lib/ruby/gems/1.8/gems/passenger-4.0.14/lib/phusion_passenger/rack/thread_handler_extension.rb:130:in `process_request'
[ 2013-09-06 07:48:35.6480 32582/7f4d0711b700 Pool2/Implementation.cpp:1172 ]: [App 32622 stderr]   from /usr/lib/ruby/gems/1.8/gems/passenger-4.0.14/lib/phusion_passenger/request_handler/thread_handler.rb:140:in `accept_and_process_next_request'
[ 2013-09-06 07:48:35.6480 32582/7f4d0711b700 Pool2/Implementation.cpp:1172 ]: [App 32622 stderr]   from /usr/lib/ruby/gems/1.8/gems/passenger-4.0.14/lib/phusion_passenger/request_handler/thread_handler.rb:108:in `main_loop'
[ 2013-09-06 07:48:35.6480 32582/7f4d0711b700 Pool2/Implementation.cpp:1172 ]: [App 32622 stderr]   from /usr/lib/ruby/gems/1.8/gems/passenger-4.0.14/lib/phusion_passenger/request_handler.rb:441:in `block (3 levels) in start_threads'
[Fri Sep 06 07:48:35 2013] [error] [client 10.100.193.133] Premature end of script headers:

我從Phusion收到了以下有關回饋乘客電子郵件列表的回復。

> Exception TypeError in Passenger RequestHandler's client socket (wrong argument type Array (expected Struct)) (process 32622, thread 0x00000002c633e0(Worker 1)):

This error indicates that your Ruby interpreter is loading a native
extension that was compiled for a different Ruby version. Try cleaning
things up:

sudo rm -rf /usr/lib/ruby/gems/1.8/gems/passenger-4.0.14/buildout/ruby
rm -rf ~/.passenger/native_support

Then restart your web server and re-access your app. Does that help?

由於我已安裝為sudo,所以沒有〜/ .passenger目錄。 但是刪除buildout / ruby​​目錄足以允許我的1.9.3應用程序運行。

我最近使用不同版本的Ruby(1.9.3和2.0.0)實現了Passenger 4.0.10。 這里有一些要檢查的東西:

您是否在每個RVM寶石集中都安裝了Passenger寶石? 當我對此有疑問時,乘客團隊建議我這樣做。

您是否在文檔中簽出了用於PassengerRuby的RVM幫助器工具 這是來自Passenger的PassengerRoot文檔的鏈接。 您可能對PassengerRuby的值有誤。 您將需要在每個gemset中執行which passenger-config命令,以獲取要為乘客配置執行的正確命令。 passenger-config --ruby-command輸出中有兩節提到了PassengerRuby的值。 我在虛擬主機配置文件的輸出中使用了第一部分中提到的值。

注意:有時,對我來說RVM可能是一場噩夢:)在使此功能生效之前,我不得不查看RVM Helper Tool文檔幾次(以及幾次失敗的嘗試)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM