我正在尝试设置Apache / Passenger配置以允许多个Ruby版本。我在这里看到了多个Rubies上的帖子(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。 / p>
编辑:应用程序需要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:
答案 0 :(得分:1)
我收到Phusion关于phusion-passenger电子邮件列表的以下回复。
> 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应用程序运行。
答案 1 :(得分:0)
我最近使用不同版本的Ruby(1.9.3& 2.0.0)实现了Passenger 4.0.10。以下是一些要检查的事项:
您是否在每个RVM gemset中安装了Passenger gem?当我遇到这个问题时,我建议乘客团队这样做。
您是否在文档中查看了PassengerRuby的 RVM帮助工具?以下是Passenger PassengerRoot Documentation的链接。你可能有错误的PassengerRuby值。您需要在每个gemset中执行 which passenger-config 命令,以获取执行乘客配置的正确命令。 passenger-config --ruby-command 的输出中有两个部分,其中提到了PassengerRuby的值。我在虚拟主机配置文件的输出中使用了第一部分中提到的值。
注意:有时RVM对我来说可能是一场噩梦:)在开始工作之前,我必须多次查看RVM Helper Tool文档(以及几次尝试失败)。