ruby-on-rails - 运行 Ruby 应用程序时为 "uninitialized constant Etc"

标签 ruby-on-rails ruby rubygems fedora

我服务器上的一些依赖于 RubyRuby 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:

如果我尝试为 rubygemsetc 手动添加 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:inrequire' 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:in gem_original_require' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:inrequire' 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:in gem_original_require' from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:inrequire' from /var/hda/platform/html/script/install-app:70

最佳答案

结果是 rails 和 gems 的版本太新了。降级到 gems 1.3.7rails 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/

相关文章:

ruby-on-rails - Omniauth 中的 "Missing template"错误(ruby-on-rails)

ruby-on-rails - Rails 设计在没有过滤器的情况下检查用户身份验证

ruby-on-rails - 将 Rails 应用程序部署到 Heroku 时出错 : simple_form issue

Ruby - 使用 RVM 安装版本 2.0.0,但未显示在更新替代方案下

ruby - 使用 rbenv 安装 Ruby 的 gems

ruby-on-rails - 带有 ActiveMerchant 的 PayPal API(遗留代码)

javascript - Braintree Drop-In UI 需要重新加载才能正常工作

ruby-on-rails - 当变量为 null 或为空时,Ruby on Rails : Using default value,

ruby-on-rails - 我如何在 Ubuntu 中使用 gem?

ruby - 为什么安装 RDOCS 和 RI 比实际的 gem 花费更长的时间?