我对 Rails 没有太多经验。回到周三,我被告知要升级 Redmine,并升级插件。我已经为此工作了 3 天,看到 Rails 还需要走多远才能进入现代包管理时代,我感到很震惊。
我在 Centos 6.3 上。起初我升级到 Ruby 1.8.7,因为那是 Centos 存储库中的内容,这足以升级 Redmine。但是当我使用 redmine_backlogs 插件时,我意识到我需要一个更新版本的 Ruby。在 Centos 上安装 Ruby 1.9.3 并不容易。在得到有用的东西之前,我尝试了 4 种不同的教程。我有很多奇怪的路径,我必须手动修复。
我用Passenger尝试了Nginx,但无法让它工作,所以后来我做了Phusion Passenger Standalone。
现在我运行了 Rails 3.2.11。鉴于过去几周 Rails 领域的所有安全问题,我想我必须修补这个问题。
我刚刚升级到最新的Redmine,应该是2.2。
我认为我的 Nginx 使用的 Ruby 版本与我想要的不同。如果我这样做:
/opt/nginx/sbin/nginx -V
然后我看到了这个:
built by gcc 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx --with-http_ssl_module --with-http_gzip_static_module --with-cc-opt=-Wno-error --with-pcre=/tmp/root-passenger-14193/pcre-8.31 --add-module=/usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/ext/nginx
看起来它使用的是 Ruby 1.8 而不是 Ruby 1.9.3,是吗?
如果我这样做:
/opt/nginx/sbin/nginx -s stop
接着:
/opt/nginx/sbin/nginx
我重新启动 nginx,但如果我在浏览器中刷新,我会得到:
Passenger encountered the following error:
The application spawner server exited unexpectedly: Unexpected end-of-file detected.
Exception class:
PhusionPassenger::Rack::ApplicationSpawner::Error
Backtrace:
# File Line Location
0 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/rack/application_spawner.rb 135 in `start'
1 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb 253 in `spawn_rack_application'
2 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server_collection.rb 132 in `lookup_or_add'
3 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb 246 in `spawn_rack_application'
4 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server_collection.rb 82 in `synchronize'
5 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server_collection.rb 79 in `synchronize'
6 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb 244 in `spawn_rack_application'
7 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb 137 in `spawn_application'
8 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb 275 in `handle_spawn_application'
9 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb 357 in `__send__'
10 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb 357 in `server_main_loop'
11 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb 206 in `start_synchronously'
12 /usr/lib64/ruby/gems/1.8/gems/passenger-3.0.19/helper-scripts/passenger-spawn-server 99
我从这里看到了与此问题相关的评论:
在检查了几个安装程序(上帝保佑虚拟机和快照)后,我解决了这个问题。普通用户帐户和 apache 用户使用另一个 ruby 版本(1.8)然后 root 使用(1.9.3)。现在一切正常。
但我不知道如何在我的服务器上修复它。
我试图查看我的 Nginx 日志:
tail /var/log/nginx/error.log
但是最近的错误是从 2 月 5 日开始的,所以我怀疑一旦我切换到使用 Phusion Passenger 后,错误日志被移动到了一个新位置,但我不知道如何找到 Nginx 存储错误日志的位置,现在 Phusion Passenger 正在控制它。有什么建议么?
更新:
我在这里找到了新的 Nginx 错误日志:
/opt/nginx/logs/error.log
错误是:
2013/02/11 17:02:15 [notice] 25295#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
2013/02/11 17:06:23 [notice] 25360#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
2013/02/11 17:10:47 [notice] 25433#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
2013/02/11 17:13:35 [notice] 25522#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
2013/02/11 17:16:31 [notice] 25598#0: signal process started
/usr/local/rvm/gems/ruby-1.9.3-p385/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: [BUG] Segmentation fault
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
如果我这样做:
echo $PATH
, 然后:
/usr/local/rvm/gems/ruby-1.9.3-p385/bin:/usr/local/rvm/gems/ruby-1.9.3-p385@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p385/bin:/usr/local/rvm/bin:/sbin:/bin:/usr/sbin:/usr/bin
从乘客文档页面:
默认值为 ruby,表示将根据 PATH 环境变量查找 Ruby 解释器。
所以你会认为它会使用 ruby 1.9.3 而不是 1.8
如果我查看config.ru
,我会看到:
require::File.expand_path('../config/environment', __FILE__)
run RedmineApp::Application
有什么建议么?