我服务器上的一些依赖于 Ruby 和 Ruby On Rails 的应用程序似乎已经停止工作。或者至少部分如此。通过重新安装 Ruby 的不同部分,我设法让有问题的应用程序的 web gui 再次开始运行。但我最有可能在此过程中破坏了其他东西。
我已经设法使用一些测试来追踪它,并且程序在运行时似乎以某种方式找不到 Etc。
我测试过
ruby -e 'puts Etc.getpwnam("apache").uid'
得到了
uninitialized constant Etc
如果我改为测试
ruby -r etc -e 'puts Etc.getpwnam("apache").uid'
我得到了正确的答案
48
这在 Amahi6 服务器上运行(运行 Fedora Core 14 64bit)。
在实际应用程序中失败的相关代码示例是
#!/usr/bin/env ruby
# Amahi Home Server
# Copyright (C) 2007-2010 Amahi
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License v3
# (29 June 2007), as published in the COPYING file.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# file COPYING for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Amahi
# team at http://www.amahi.org/ under "Contact Us."
require File.dirname(__FILE__) + '/../config/boot'
#require 'commands/runner'
require 'optparse'
# switch to apache:users first
uid = Etc.getpwnam("apache").uid
gid = Etc.getgrnam("users").gid
Process.gid = gid
Process.egid = gid
Process.uid = uid
Process.euid = uid
...
这同样失败了
uninitialized constant Etc
澄清:我根本没有更改此代码,它在之前的当前状态下一直有效
我搞砸了什么? :)
更新: 现在安装的 Ruby 版本为 1.8.7
更新 2:
如果我尝试为 rubygems 和 etc 手动添加 require 它会失败,但会提示另一个包。所以我认为我的 ruby 的核心存在一些根本性的问题。
/usr/lib64/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:55: uninitialized constant ActiveSupport::Dependencies::Mutex (NameError) from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in
gem_original_require' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in
require' from /usr/lib64/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support.rb:56 from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:ingem_original_require' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in
require' from /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record.rb:25 from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:ingem_original_require' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in
require' from /var/hda/platform/html/script/install-app:70
最佳答案
结果是 rails 和 gems 的版本太新了。降级到 gems 1.3.7 和 rails 2.3.8。
gem update --system 1.3.7
gem uninstall rails
gem install rails --version 2.3.8
关于ruby-on-rails - 运行 Ruby 应用程序时为 "uninitialized constant Etc",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7189487/